vector:长度可变数组,即“长度根据需要而自动改变的数组”。
使用vector需于代码头部添加#include<vector>
,并且随后加上一句:using namespace std;
即可。
vector<type> name;
其中type可为任何基本类型(如int等)、结构体和STL标准容器。
注意:(1)若type也是STL容器(STL容器嵌套),则需要在>>后加上空格(C++11之前标准的编译会将其视为移位操作)。即vector<vector<int>> name;
。此时可把vector理解成两个维度都可变的二维数组理解。
vector<int> vi[100];
这样vi0到vi100中每一个vector都是一个vector容器。
与vector<vector<int>> name;
不同的是:这种数组是一维长度为100,另一维长度可变的二维数组。
定义:vector<typename>::iterator it;
代码:
#include<stdio.h>
#include<vector>
using namespace std;
int main(){
vector<int> vi;
for(int i = 1; i <= 5; i++){
vi.push_back(i); //依次在vi的末尾添加5个元素,即1、2、3、4、5
//push_back(x)会在vector后添加一个元素x,时间复杂度为O(1)
}
vector<int>::iterator it = vi.begin();
//vi.begin()为取vi的首元素地址,而it指向此首元素地址
//遍历元素
for(int i = 0; i < 5; i++){
printf("%d ",*(it + i)); //输出vi[i],即vi[i]和*(vi.begin()+i)是等价的
//只有vector和string中,才允许使用迭代器加上整数这种写法
}
//遍历元素
for(vector<int>::iterator it = vi.begin(); it != vi.end(); it++){
//vector的迭代器不支持it < vi.end(),因此使用it != vi.end()
//迭代器it还支持自加和自减各两种操作
//end()取尾元素地址的下一个地址,即左闭右开
//end()作为迭代器末尾标志,不存储任何元素
printf("%d ",*it);
}
printf("%d\n",vi.size()); //计算vi的长度,输出5,时间复杂度为O(1)
vi.pop_back(); //删除vi的尾元素5,时间复杂度为O(1)
vi.insert(vi.begin()+2,-1);//将-1插入vi[2]的位置,时间复杂度为O(N)
vi.erase(vi.begin()+3); //输出1、2、-1、4
vi.erase(vi.begin()+1,vi.begin()+4);//删除vi[1]、vi[2]、vi[3]
vi.clear();//清空vector中的所有元素,,时间复杂度为O(N)
}
(1)vector可以作为数组使用,而且在一些元素个数不确定的场合可以节省空间。
(2)若需要根据一些条件把部分数据输出在同一行,数据中间用空间隔开。由于在其当中输出数据个数不确定,为了使最后一个满足条件的数据后面不输出额外的空格。
可以先用vector记录所有需要输出的数据,然后一次性输出。
版权所有:可定博客 © WNAG.COM.CN
本文链接:https://cloud.tencent.com/developer/article/1616893
特别声明:除特别标注,本站文章均为原创,本站文章原则上禁止转载,如确实要转载,请电联:wangyeuuu@qq.com,尊重他人劳动成果,谢过~