一、vector 向量
1、vector 不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector 类型的每一种都指定了其保存元素的类型。因此,vector 和 vector 都是数据类型。使用 vector 之前,必须包含相应的头文件
#include <vector>
using std::vector;
2、初始化
vector<T> v1; vector保存类型为T对象。默认构造函数v1为空
vector<T> v2(v1); v2是v1的一个副本
vector<T> v3(n, i); v3包含n个值为i的元素
vector<T> v4(n); v4含有值初始化的元素的n个副本
注:
在指定容器元素为容器类型时,必须如下使用空格,否则编译器会将两个>认为是位移符号:
vector< vector<string> > lines;
3、操作
vector<int> v;
v.empty() 如果v为空,则返回true,否则返回 false。
v.size() 返回v中元素的个数,类型为vector<int>::size_type
v.resize(n) 重新设置该容器的大小
v.clear() 移除容器中所有数据。
v.push_back(t) 在v的末尾增加一个值为t的元素。
v.pop_back() 删除容器v的最后一个数据
v.erase(n) 删除下标为n的位置的数据
v.erase(b, e) 删除(b, e)区间的数据
v.insert(n, elem) 在下标为n的位置插入一个elem拷贝
v.insert(v, b, e) 在容器v插入(b, e)区间的数据
v.back() 返回容器v的最后一个元素的引用。如果v为空,则该操作未定义
v.front() 返回容器v的第一个元素的引用。如果v为空,则该操作未定义
v[n] 返回下标为n的元素,如果n<0或n>=c.size(),则该操作未定义
v.at(n) 返回下标为n的元素的引用,如果下标越界,则该操作未定义
v1 = v2 把v1的元素替换为 v2 中元素的副本
v1 == v2 如果v1与v2相等,则返回 true
v1.swap(v2) v1、v2内容交换
v.assign(b, e) 重新设置c的元素:将迭代器b和e标记的范围内所有的元素复制到v中。b和e必须不是指向 c 中元素的迭代器
v.assign(n,t) 将容器v重新设置为存储n个值为t的元素
!=, <, <=,>, and >= 保持这些操作符惯有的含义
二、迭代器
1、迭代器是一种检查容器内元素并且遍历元素的数据类型,例:
vector<int>::iterator iter
2、每种容器都定义了一队命名为begin和end的函数,用于返回迭代器。如果容器中有元素的话,由begin返回的元素指向第一个元素,若v不为空,iter指向v[0],由end返回的迭代器指向最后一个元素的下一个,不存在,若v为空,begin和end返回的相同。
vector<int>::iterator iter=v.begin();
==和!=操作符来比较两个迭代器,若两个迭代器指向同一个元素,则它们相等,否则不相等。
例:将vector中的元素全部赋值为0;:
for(vector<int>::iterator iter=v.begin(); iter!=v.end(); iter++)
*iter=0;
3、迭代器操作
*iter 返回迭代器 iter 所指向的元素的引用
iter->mem 对 iter 进行解引用,获取指定元素中名为 mem 的成员。等效于 (*iter).mem
*iter 返回迭代器 iter 所指向的元素的引用
++iter
iter++ 给 iter 加 1,使其指向容器里的下一个元素
--iter
iter-- 给 iter 减 1,使其指向容器里的前一个元素
iter1 == iter2
iter1 != iter2 比较两个迭代器是否相等(或不等)