一、vector的常见用法详解
1.vector的定义
头文件:#include<vector>
单独定义一个vector:
vector<typename> name;
注:如果typename也是一个STL容器,定义的时候要记得在>>符号之间加上空格,因为一些使用C++11之前标准的编译器会把它视为移位操作,导致编译错误。
如果typename是vector,就是下面的这样定义:
vector<vector<int> > name; //>>之间要加空格
例子:
vector<int> name;
vector<double> name;
vector<char> name;
vector<node> name;
定义vector二维数组:
vector<typename> Arrayname[arraySize];
例如:
vector<int> vi[100];
这样Arrayname[0]~Arrayname[arraySize-1]中每一个都是一个vector容器。
2.vector容器内元素的访问
(1)通过下标访问
vector[index] 即可访问
(2)通过迭代器访问
迭代器(iterator)可以理解为一种类似指针的东西,其定义为:
vector<typename>::iterator it
这样it就是一个vector<typename>::iterator 型的变量。
例子:
vector<int>::iterator it;
vector<double>::iterator it;
这样就定义了迭代器it,并且可以通过*it来访问vector里的元素。
例如:
vector<int> vi; for(int i=1;i<=5;i++){ //循环完毕后vi中元素为1 2 3 4 5 vi.push_back(i); //push_back(i) 在vi的末尾添加元素i,即依次添加1 2 3 4 5 }
可以通过类似下标和指针访问数组的方式访问容器内的元素
#include<stdio.h> #include<vector> using namespace std; int main(){ vector<int> vi; for(int i=0;i<=5;i++){ vi.push_back(i); } //vi.begin()为取首元素地址,而it指向这个地址 vector<int>::iterator it=vi.begin(); for(int i=0;i<5;i++){ printf("%d ",*(it+i));//输出vi[i]; } return 0; }
输出结果:1 2 3 4 5
其中 vi[i]和*(vi.begin()+i)是等价的
end()函数,end()并不是取vi的尾元素地址,而是取尾元素地址的下一个地址,end()作为迭代器末尾标志,不存储任何元素。
例如:
for(vector<int>::iterator it=vi.begin();it!=vi.end();it++){ printf("%d ",*it); }
3.vector常用函数实例解析
(1)push_back()
push_back(x)就是在vector后面添加一个元素x,时间复杂度O(1)。
(2)pop_back()
pop_back() 用以删除vector的尾元素,时间复杂度为O(1)。
(3)size()
size()用来获得vector中元素的个数,时间复杂度O(1)。
(4)clear()
clear()用来清空vector中的所有元素,时间复杂度O(N)。
注意:因为相应内存区域的内容并没有被覆盖,这样就保持着原来的值,直到这部分内存被重新写入时才会改变。
(5)insert()
insert(it,x)用来向vector的任意迭代器it处插入元素x,时间复杂度O(N)。
(6)erase()
erase()有两种用法:删除单个元素、删除一个区间内的所有元素,时间复杂度O(N)。
4.vector的常见用途
(1)存储数据
(2)用邻接表存储图