Vector的用法(STL基本容器)

vector

vector是数组的一种类表示,它提供了自动内存管理功能,可以动态地改变vector对象的长度,并随着元素的添加和删除而增大缩小,
它提供了对元素的随机访问,在尾部添加和删除元素的时间是固定的,但在头部或中间插入和删除元素的复杂度为线性时间。除序列外,vector还是可反转容器

vector存在于头文件vector中

#include < vector>

初始化
Vector的用法(STL基本容器)
如果vector的元素类型是int,默认初始化为0;如果vector元素类型为string,则默认初始化为空字符串。

vector v1;
vector v2;
vector v3;
vector<vector >; //注意空格。这里相当于二维数组int a[n][n]嵌套vector;
vector v5 = { 1,2,3,4,5 }; //C11列表初始化
vector v6 = { “hi”,“C++”,“Primer”,“learning”,“hard” };
vector v7(5, -1); //初始化为-1,-1,-1,-1,-1。第一个参数是数目,第二个参数是要初始化的值
vector v8(3, “hi”);
vector v9(10); //默认初始化为0
vector v10(4); //默认初始化为空字符串

向vector写入数据(注意写入位置对时间复杂度产生的影响)
for (int i = 0; i < 5; i++)
{
vec.push_back(i);
}

vector其他成员函数操作
Vector的用法(STL基本容器)
访问和操作vector中的每个元素(注意vector是有序容器,频繁增删将导致严重的性能问题)
for (int i = 0; i < vec.size(); i++)
{
cout << vec[i] << endl;
vec[i] = 100; //不建议这样写数据
cout << vec[i] << endl;
}

vector最常用的增删操作
Vector的用法(STL基本容器)
注意:

虽然vertor对象可以动态增长,但是也或有一点副作用:已知的一个限制就是不能再范围for循环中向vector对象添加元素。另外一个限制就是任何一种可能改变vector对象容量的操作,不如push_back,都会使该迭代器失效。另外,为容器申请内存空间的时候会为其额外的多申请一些空间。C++ Primer中专门有说明

总而言之就是:但凡使用了迭代器的循环体,都不要向迭代器所属的容器添加元素!

C++中push_back和insert两个有什么区别?

顾名思义push_back把元素插入容器末尾,insert把元素插入任何你指定的位置。不过push_back速度一般比insert快。如果能用push_back尽量先用push_back。