1.头文件声明
#include<vector>
2.初始化
(1)vector<int> v1; //v1是一个空vector,它执行的是默认初始化。
(2)vector<int> v2(v1); //v2中包含v1的所有元素,同vector<int>v2=v1;
(3) vector<int>v3(n,m); //v3中包含了n个重复的值为m的元素;m没有的话默认为0.
(4)vector<int>v4{a,b,c,}; //v4包含了三个元素,初始值分别为a,b,c;同vector<int>v4={a,b,c};
(5) vector<vector<int> > a; //注意空格,相当这里相当于二维数组int a[n][n];
在c++11之后 vector<vector<int>> a;也被允许。
3.添加元素
(1)未申请空间
vector<int> v1;
//加到尾部
v1.emplace_back(11);
v1.push_back(3);
//插入元素,插入头部
v1.insert(v1.begin(), 1);
//插入任意位置,n是想要插入的位置
a.insert(a.begin() + n, 1);
(2)直接申请空间
vector<int> v1(3);
v1[0]=2;//直接赋值
对于二维vector变量
//直接申请空间
//构建一个5×5,且所有元素均为0的二维动态数组
vector<vector<int>> v1(5,vector<int>(5,0);
v1[0][1] = 10;
v1[2][3] = 3;
//未申请空间
vector<vector<int>> v1;
//加到尾部
v1.emplace_back({0,1,2}); //v1[0][0]=0,v1[0][1]=1,v1[0][2]=2;
v1.push_back({1,2,3});
//插入元素,插入头部
v1.insert(v1.begin(),{1,1});
//插入任意位置,n是想要插入的位置
v1.insert(v1.begin()+n,{1,1});
其实说到底,对于新元素必须以push之类函数的方式插入,而对于原有的元素以直接访问的方式。
4.访问
for (int i = 0; i < v1.size(); i++)
{
cout << v1[i] << endl;
}
迭代器代码如下:
vector<string> v6 = { "hi","my","name","is","lee" };
for (vector<string>::iterator iter = v6.begin(); iter != v6.end(); iter++)
{
cout << *iter << endl;
//下面两种方法都都可以检查迭代器是否为空
cout << (*iter).empty() << endl;
cout << iter->empty() << endl;
}
5.删除元素
(1)删除固定位置
for (int i = 0; i < v1.size(); i++)
{
cout << v1[i] << endl;
}
cout << "size is :" << v1.size() << endl;
cout << "capacity is :" << v1.capacity() << endl;
v1.pop_back();//删除容器尾部元素
for (int i = 0; i < v1.size(); i++)
{
cout << v1[i] << endl;
}
cout << "size is :" << v1.size() << endl;
cout << "capacity is :" << v1.capacity() << endl;
运行结果
可以发现容器大小变了,但是容量没变。(这么说可能有点奇怪,结合英文理解一下就好了)
(2)删除指定位置
v1.erase(v1.begin() + 1);//删除第二个位置的元素
6.一些重要函数的补充
vector对象的几个重要操作,举例说明如下:
(1)a.assign(b.begin(), b.begin()+3);//b为向量,将b的0~2个元素构成的向量赋给a
(2)a.assign(4,2);//是a只含4个元素,且每个元素为2
(3)a.back();//返回a的最后一个元素
(4)a.front();//返回a的第一个元素
(5)a[i]; //返回a的第i个元素,当且仅当a[i]存在
(6)a.clear();//清空a中的元素
(7)a.empty();//判断a是否为空,空则返回ture,不空则返回false
(8)a.pop_back();//删除a向量的最后一个元素
(9)a.erase(a.begin()+1,a.begin()+3);//删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)
(10)a.push_back(5);//在a的最后一个向量后插入一个元素,其值为5
(11)a.insert(a.begin()+1,5);//在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4
(12)a.insert(a.begin()+1,3,5);//在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
(13)a.insert(a.begin()+1,b+3,b+6);//b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8,插入元素后为1,4,5,9,2,3,4,5,9,8
(14)a.size();//返回a中元素的个数;
(15)a.capacity();//返回a在内存中总共可以容纳的元素个数
(16)a.rezize(10);//将a的现有元素个数调至10个,多则删,少则补,其值随机
(17)a.rezize(10,2);//将a的现有元素个数调至10个,多则删,少则补,其值为2
(18)a.reserve(100);//将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100.这种操作只有在需要给a添加大量数据的时候才 显得有意义,因为这将避免内存多次容量扩充操作(当a的容量不足时电脑会自动扩容,当然这必然降低性能)
(19)a.swap(b);//b为向量,将a中的元素和b中的元素进行整体性交换
(20)a==b; //b为向量,向量的比较操作还有!=,>=,<=,>,<
7.参考文章
1.http://t.csdn.cn/mCeQDhttp://t.csdn.cn/mCeQD 黑马星云
https://blog.csdn.net/qiancm
2.http://t.csdn.cn/gHkTJhttp://t.csdn.cn/gHkTJ 千久Plus
https://blog.csdn.net/weixin_46308081