vector
添加vector头文件即#include <vector> 还需要在头文件下面加一句 using namespace std;
1.定义
vrctor<typename> name;
vector<int> vt;
2.vector容器内元素的访问
(1)通过下标访问
vt(n);即可访问到第n+1个元素 0<=n<=vt.size();
(2)通过迭代器访问
迭代器类似指针
vector<int>::iterator it;声明了一个迭代器it,这样就可以通过*it来访问vector里的元素了.
#include <cstdio>
#include <vector>
using namespace std;
int main(){
//定义了一个可变长数组
vector<int> vt;
//用push_back()放入元素
for(int i=1;i<=5;i++){ // 1,2,3,4,5
vt.push_back(i);
}
//定义迭代器 it
vector<int>::iterator it=vt.begin();//相当于指针
//通过迭代器访问
for(int i=0;i<vt.size();i++){
printf("%d ",*(it+i));
}
printf("\n");
//通过下标访问
for(int i=0;i<vt.size();i++){
printf("%d ",vt[i]);
}
return 0;
}
输出结果: *(it+i)和vt[i]是等价的
3.vector容器中常用的方法
(1) push_back();
push_back(x)在vector的后面添加一个元素x,时间复杂度为O(1)
(2)pop_back();
pop_back();删除vector的尾元素一个元素x,时间复杂度为O(1)
(3)size();
size()返回vector中元素个数,时间复杂度为O(1)
(4)begin();
begin()返回vector中首元素的地址,注意返回的是地址,时间复杂度为O(1)
(5)end();
end();返回vector中尾元素的地址,注意返回的是地址,时间复杂度为O(1)
(6)clear();
clear();清空vector中的所有元素,时间复杂度为O(n),n为vector中元素个数
(7)erase();
时间复杂度O(n)
<1>删除单个元素 erase(it);即删除迭代器为it处的元素
<2>删除一个区间内的所有元素.erase(first,end),即删除[first,end)内的所有元素
To demonstrate: vt.erase(vt.begin()+2,vt.begin()+4); 删除了 vt[2],vt[3]
#include <cstdio>
#include <vector>
using namespace std;
int main(){
//定义了一个可变长数组
vector<int> vt;
//用push_back()放入元素
for(int i=1;i<=5;i++){ // 1,2,3,4,5
vt.push_back(i);
}
//定义迭代器 it
vector<int>::iterator it=vt.begin();//相当于指针
//erase(first,end) 删除了vt[2]和vt[3]不包含vt[4]
vt.erase(vt.begin()+2,vt.begin()+4);
//通过迭代器访问
for(int i=0;i<vt.size();i++){
printf("%d ",*(it+i));
}
return 0;
}
(8)insert();
insert(it,x);向vector的任意迭代器it处插入一个元素x,时间复杂度O(n)
vt.insert(it+1,20);
结果:1 20 2 3 4 5