vector的定义
定义一维数组:vector< int > v;
定义二维数组:vector<int> v[100]; 或 vector<vector<int> > v;(前者一维的长度已固定为100,另一维长度可变,二后者两个维度的长度均可变)
vector的元素访问
两种方式:下标访问或迭代器访问
下标:对于vector<int>v; 直接v[0],v[7]即可访问指定元素(下标从0到v.size -1)
迭代器:*(v.begin()+i) 等价于 v[i] (注意 * 号)
注意:①只有vector 和 string 可以使用“迭代器 + 整数”的方法,其他容器不行。
②迭代器不是数字,不能赋值给int类型。如下错误代码示例:
//错误代码1:
int i = v.begin();
for(i = v.begin() ; i <v.size; i++) cout<<v[i]<<endl;
//错误代码2:
v [v.begin()+2];//迭代器不是数字,无法通过这种方式访问v[2]
//正确访问第i个元素的方式:
v[i] 或 *v.begin()+i
vector常用函数
v.push_back(x):在v末尾插入x
v.pop_back(): 删除v当前末尾元素
v.size():获取vector当前元素个数。返回类型为unsigned
v.clear() :清空vector中所有元素。时间复杂度为O(n),n为元素个数
v.insert(it , x):在迭代器it处插入x。如:v.insert(v.begin() + 2 , -1)表示将-1插入v[2]的位置。假设原本为 1 3 5 7 9,插入后为1 3 -1 5 7 9 (再次强调,①迭代器不是整型 ②*(v.begin()+i) 等价于 v[i] )
v.erase():用于删除元素。有两种用法:删除单个元素,和 删除某区间内所有元素。时间复杂度均为O(N)
①删除单个元素:v.erase(it),it为迭代器。
例如,v.erase(v.begin()+2),删除元素v[2].
②删除区间内所有元素:v.erase(it_first , it_last),删除左闭右开 [ it_first , it_last ) 内的所有元素。it_first , it_last均为迭代器。(不是整数!)
例如v.erase( v.begin()+1, v.begin()+5 ), 表示删除v[1],v[2],v[3],v[4]。
其中v.push_back()v.pop_back()的时间复杂度为o(1),clear, insert, erase时间复杂度均为o(n)
v.size返回类型为unsigned,可以赋值给整型,其他函数返回值为void,不可赋值给整型。