C++:vector、iterator

一、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  比较两个迭代器是否相等(或不等)

猜你喜欢

转载自blog.csdn.net/keyue123/article/details/79109931