STL 之 vector 用法
一、头文件 #include<vector>
二、常用方法:
// 在这个向量的尾部插入x的考贝,平均时间为常数,最坏时间为O(n);
1: void push_back(const T& x);
比如:vector<string> fruits;
fruits.pusb_back ("orange");
fruits.push_back("apples");
fruits.push_back("grapes");
fruits.push_back("apples");
那么向量fruits现在包含了下列顺序的项:"orange", "apples", "grapes", "apples";
//前置条件:迭代器位于向量头和向量尾后的下一个位子之间
//后置条件:X的拷贝放入迭代器所指的位置; 调用前,每个大于等于该位置下标的位置一次向后移动;返回位于新插入位置的迭代器;O(n);
2: iterator insert(iterator position, const T& X);
假设迭代器 ite 位于小标为2的位置上,实行操作:vector<cstring>::iterator new_ite = fruits.insert(ite, "kiwi");后 fruits 向量变为如下:
"orange", "apples", "kiwi", "grapes", "apples";
迭代器 new_ite 位于下标为2 的“kiwi”上; 并且 ite 失效(即:ite 不再存在 或 不确定其位置);
//后置条件: 调用后向量尾部的项被删除;
3: void pop_back();
实行操作:fruits.pop_back();后 向量 fruits 如下:"orange", "apples", "kiwi", "grapes";
//前置条件:迭代器位于向量的某一项位置上;
//后置条件:这次调用前位于迭代器上的项被删除; 调用后次迭代器下标后面的所有下标一次向前移动; O(n);
4: void erase (iterator position);
如果迭代器 ite 位于项 “apples” 的位置,实行操作:fruits.erase(ite);后向量 fruits 如下: "orange", "kiwi", "grapes";
迭代器 ite 失效(即:ite 不再存在 或 不确定其位置);
此外,void erase(iterator first, iterator last)还用一个拥有两个迭代器参数的版本----first和last, 所有在first(包括first)和 last(不包括 last)之间的项将被删除;
若我们假设 fruits 向量中有项:"orange", "apples", "kiwi", "grapes"; 并且 first 位于“apples”, last 位于 “grapes”上;
执行操作:fruits.erase (first, last) 后向量 fruits 如下:"orange", “grapes";
同样,迭代器 first 和 last 也要失效;
// 返回向量中项的 个数;
5: unsigned size ();
继续接着 4 第一个erase() 后的操作执行:unsigned cnt = fruits.size(); 那么 cnt 将是 3;
// 返回位于向量开头的迭代器
6: iterator begin ();
执行操作: vector <cstring> :: iterator ite = fruits.being();
那么迭代器 ite 位于 项 “orange” 上;
// 返回恰好位于位于向量最后一项的下一个位置,(注意不是在最后一个项的位置,而是其后)
7: iterator end();
执行操作:
vector <cstring>::iterator ite = fruits.end ();
fruits.insert(ite, "lemons");
向量fruits如下: "orange", "kiwi", "grapes", "lemons";
// 返回向量开头项的引用
8: T& front()
继续执行: cout << fruits.front(); 那么输出的是:“orange”;
// 如果这个向量中不包含任何项,则返回 真, 否则返回假;
9: bool empty ();
// 清空向量中所有项
10: void clear ();
继续执行操作: fruits.clear (); 则向量法 fruits 建为空
此外,对于数组的 [] 运算符 也完全使用与 vector 且方法完全一样,这里不再赘述;