前言:
古人云:工欲善其事,必先利其器。在学习的过程中很多时候都需要进行查询文档,这里分享一个自已一直在使用的文档 cplusplus.com(建议使用旧版)
正文:
一、关于vector的介绍
vector是C++库中提供的动态数组模板类,既然是动态数组自然可以进行数组的扩容,模板类赋予了数组可以存储任何类型的数据。
动态数组的扩容分为本地扩容和异地扩容
异地扩容是开一片新的空间将原来位置的内容拷贝到新的位置,然后将原来位置进行释放
模板类的定义
- 其中T是需要在数组中存储数据的类型
- allocator是分配器用于内存管理
二、 构造函数
构造函数有以上四种,分别是默认构造、填充构造、迭代器构造和拷贝构造
-
默认构造
-
填充构造
解读参数:n是填充的个数,val是填充的内容,val后面给了缺省值可以调每个类型的默认构造函数(在下一篇文章的vector的模拟实现中会详细解答)
-
迭代器范围构造
-
拷贝构造
三、赋值操作
operator=
既可以自己给自己进行赋值,又可以用已经创造的vector给自己进行赋值,局限就是不能进行局部赋值
assign
既可以通过区间进行赋值,又可以通过填充进行赋值,正好补充了operator的局部赋值,使得赋值体系更完整
四、容量和大小
-
size
-
capacity
-
empty
-
resize
-
reserve
size:计算vector中的元素个数
capacity:计算vector的大小
empty:判断vector是否为空,为空返回false,不为空返回ture
resize(重点):
如果capacity()>n>size(),在size到n的范围用val进行填充
如果n<size(),相当于删除vector中n以后的数据
如果n>capacity(),先进行扩容,然后将val从size()开始填充到n
reserve(重点):提前开辟空间,进行空间的预留
如果n>capacity,则进行空间的开辟,否则无变化
五、插入和删除
-
push_back
-
pop_back
-
insert
-
erase
push_back:将数据val进行尾插
pop_back:将vector中的最后一个元素进行删除
insert(重点):
单个插入:在position位置,插入数据val
填充插入:在position到position+n的范围依次插入val
范围插入:从position位置开始插入范围first到last的内容
erase(重点):
单个删除:删除position位置的数据
范围删除:删除从first位置到last位置的数据
六、vector的数据存取
-
operator[ ]
-
at
-
front
-
back
operator[ ](重点):用于获取vector下标为n的位置的元素
at: 和operator相同,用于获取vector下标为n位置的元素,与之不同的是at会进行严格的边界判 断,如果越界则会抛异常
front: 获取vector中的首个元素
back: 获取vector中的最后一个元素
七、其他操作
-
swap
-
clear
swap: 用x交换容器内的内容,x必须和容器具有相同类型,大小和容量可以不相同
clear: 清除容器中的内容