介绍
- vector(向量)是大小可变的序列容器
- 和数组相似,顺序存储,可使用下标访问(随机访问),但不同的是,vector大小可以动态改变,且是自动变化(容器自己处理的)
- vector非常有效地访问其元素(就像数组一样)并且相对有效地从其末尾添加或删除元素,例如cout<<iv[i];这是可以的。对于在末尾以外的位置插入或删除元素的操作,它们的性能比其他位置差。
- 虽然访问像数组一样,可以根据下标随机访问,但是它的插入不能根据下标像数组一样插入,例如cin>>iv[i];这是错误的
基本操作
-
必须引用的包
#include <vector>
-
声明
vector<int> iv;//也可选择存double型等,不一定是int型
-
末尾添加元素
iv.push_back(x);
-
末尾删除元素
iv.pop_back();
-
任意位置插入
iv.insert (iv.begin()+i,2,100);//第一个表示在第i+1个位置前面插入;第二个表示插入两个同样的数值;第三个表示插入数值为100 iv.insert (iv.begin(),100);//第一个表示在第一个位置处插入;第二个表示插入一个数值100
-
任意位置删除
iv.erase (iv.begin()+i);//删除第i+1个元素 iv.erase (iv.begin(),iv.begin()+3);//删除第一个到第三个元素(总共三个)
-
使用下标访问
cout<<iv[0]<<endl;//下标从0开始
-
开始指针,末尾指针
iv.begin();//指向第一个元素的位置(即下标0的位置) iv.end();//指向最后一个元素的下一个位置
-
迭代器访问
vector<int>::iterator it; for(it=iv.begin();it!=iv.end();it++) cout<<*it<<endl; //或者 for (int i = 0; i < iv.size(); i++) { cout << iv[i] << endl; }
-
向量大小 iv.size();
-
向量清除 iv.clear();
-
向量判空 iv.empty();
-
访问第一个元素 iv.front();
-
访问第二个元素 iv.back();
-
元素翻转
```
#include <algorithm>//元素翻转必须引用
reverse(iv.begin(), iv.end());
```
- 元素排序
```
#include <algorithm>//元素排序必须引用
sort(iv.begin(), iv.end());//默认是从小到大排序
```
```
//此处是从大到小排序
#include <algorithm>//元素排序必须引用
bool cmp(const int a,const int b)
{
return a > b;
}
sort(iv.begin(),iv.end(),cmp);
```
- 调整容器大小 iv.resize(10)
resize会改变容器的容量和当前元素个数,并分配了内存,容器大小变成了10,不会改变之前容器里面已有的元素,后面会自动添加元素,默认值为0
换句人话:
vector< int > iv;
for ( int i=0; i<3;++i)
{
vecInt.push_back(i);
}
现在是里面有3个元素
iv.resize(10);
iv里面就有10个元素了,前三个是之前添加的0 1 2,后面7个是默认值0
此时如果执行iv.push_back(5);
然后遍历发现,打印出来的值是0 1 2 +7个0,没有5
这个真的卡了半天
如果后面想resize(10),然后往里面正常放数据
vector<int> vIniMatches;
vIniMatches.resize(iniMatchedNum);
int num;
for(vector<int>::iterator i=vIniMatches.begin(), iEnd=vIniMatches.end(); i!=iEnd; i++){
// 此处有操作 num不断变化的
*i=num;
}