stl

三大概念:容器,迭代器,算法。模板是stl实现的基础。

迭代器连接起了容器和算法。

vecrtor相当于栈,都是在后插入,弹出,防止头插法后移元素,浪费时间。连续存储,但可以任意位置插入删除,使用迭代器可++,因为连续存储可以随机访问。扩充容量时,会把原来的数据删除,拷贝到更大容量的vector里面去。size()和capacity不相同,capacity容量更大。pushback pop时间复杂度为1,但插入删除,需要移动元素,时间复杂度高。

at()成员函数越界会抛出错误,[]不会,会直接崩,而一般有[]的就支持随机访问。

使用resize之后,元素个数减少,但是容量还是很大,为了释放多余容量,使用swap

vector<int> v;

v.pushback(1);

vector<int>(v).swap(v);//使用匿名对象,利用其用完就立马释放的原理

首先创建匿名对象vector<int>(v),其元素个数为v.size,容量也不大,接着将v与匿名对象互换,现在是匿名对象的capacity大,语句结束后v有了和元素个数相等的容量,就达到了节省内存的目的

reserve预先分配capacity可以防止多次创建新空间,防止不断拷贝复制,浪费时间。

reserve只是开辟空间,并没有元素,没有初始化,

resize改变容器大小,且创建对象,初始化

 

2. 函数对象

本身是对象,只是重载了(),可以做参数和返回值,for_each的返回值可以用对象来接受,第三个参数也可出入对象名,传入时候不是引用而是拷贝。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值