vector
STL中的函数都必须使用:变量名.函数名()表示,例如vi.push_back();
vector翻译为向量,使用“变长数组”的叫法更容易理解。在考试题中,有时会碰到普通数组会超内存的情况,这时候使用vector会让问题的解决便捷许多。
使用vector要添加:#include<vector> using namespace std;
定义:vector<typename> name; 这个定义其实相当于一维数组name[SIZE],只不过其长度可以变化,这里的typename可以是任何类型,例如int,double,char,结构体等,也可以是STL容器,但在定义时记得在>>符号之间加上空格
举个例子:vector<int> name;
vector<double> name;
vector<vector<int> > name; //>>之间要加空格,多用于二维数组(矩阵)----------即name[ ] 中的每一个元素都是一个vector(所以还要定义一个vector一维向量,然后将 v push_back到name 向量中),初学者可以把二维vector数组当作两个维都可变长的二维数组。--------------------------------------------见下例题
vector容器内元素的访问:
(1)通过下标访问
对一个定义为vector<typename>vi的vector容器来说,直接访问vi[index]即可 (如vi[0]、vi[1]),这里的下标是从0到vi.size()-1
(2)通过迭代器访问
迭代器可以理解为一种类似指针的东西,其定义为vector<typename>::iterator it; it 就是vector<typename>::iterator型的变量,并且通过 *it来访问vector里的元素
或
既然上面提到了begin()函数的作用为取 vi 的首元素地址,那么这里就要提到end()函数。和begin()不同的是,end()并不是取vi的尾元素地址,而是取尾元素地址的下一个地址,end()作为迭代器末尾标志,不储存任何元素。
毕竟美国人的思维比较习惯左闭右开。
最后再提一下,在常用STL容器中,只有在vector和string中,才允许使用vi.begin()+3这种迭代器加上整数的写法。
pop_back()
有添加就有删除元素,pop_back()用以删除vector的尾元素,时间复杂度是O(1)
clear() 函数: 用来删除vector中的所有元素
insert() :
insert(it,x)用来向vector的任意迭代器 it 处插入一个元素x
erase()有两种用法: ①删除单个元素 ②删除一个区间内的所有元素
①
②