文章目录
1.vector介绍
1.是表示大小可以改变的容器
2.采用一块连续的空间存储元素,可以用下标对元素进行访问。和数组很类似,但是vector的大小可以动态改变,并且是被容器自动处理的
3.从本质上来看vector是动态分配数组来存储它的元素的,因此当插入元素需要改变容量的时候,它会重新分配一个数组,并且将元素全部转移到该数组之中,就时间来说,这是一个代价比较高的方式。
4.vector分配空间时,会额外分配一些空间来适应生长。不同的库的实现虽然略有不同,但是整体相似,因此尾插入一个元素时的时间复杂度为常数时间
5.vector对末尾的元素的插入、删除是很高效的,但是操作其它位置的元素的效率就不那么高效了
2.构造函数
2.1默认构造函数
2.2半缺省构造
2.3拷贝构造
2.4迭代器构造
3.元素访问方式
3.1[下标]访问、迭代器访问
3.2范围for需注意陷阱
4.容器接口
4.1max_size(无用接口)
判断当前内存可以存储此元素的最多的个数
4.2size、capacity、reserve、resize
4.2.1使用展示
4.2.2capacity增容规则
4.3[]访问
4.4swap
类的swap是交换类中的成员,std之中的swap则需要发生3次深拷贝
4.5push_back、pop_back
尾插和尾删
4.6insert、erase
insert和erase一般是不推荐使用的,因为时间复杂度太高
在pos位置,插入val
vector没有提供头插的接口,但是可以用insert来完成。
这是因为头插头删的时间复杂度很高,如果经常使用头插头删不应该使用 vector而应该用list
4.7迭代器失效
4.8find
vector里面没有提供find接口,而是用算法里面的find
因为许多容器都需要find,因此直接提供一个函数模板,传入迭代器便可以寻找,find的返回值是迭代器,未找到返回的是最右边的迭代器,因为迭代器都是左闭右开的