首页 > 代码库 > STL 之 vector 用法

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.pusb_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 ();

 

此外,对于数组的 [] 运算符 也完全使用与 vector  且方法完全一样,这里不再赘述;

STL 之 vector 用法