迭代器的基本原理
- 迭代器是一个"可遍历STL容器内部分或全部元素"的对象
- 迭代器指出容器中的一个特定位置
- 迭代器就如同一个指针
- 迭代器提供对一个容器中的对象的访问方法,并且可以定义容器中对象的范围
- 迭代器就像一个指针
迭代器的分类
输入迭代器:
又称为"只读迭代器",它从容器中读取元素,只能一次读入一个元素向前移动,只支持一遍算法,同一个输入迭代器不能两遍遍历一个序列。
输出迭代器:
又称为"只写迭代器",它往容器中写入元素,只能一次写入一个元素向前移动,同一个输出迭代器不能两边遍历一个序列。
正向迭代器:
组合输入迭代器和输出迭代器的功能,还可以多次解析一个迭代器指定位置,可以对一个值进行多次读/写
双向迭代器:
组合正向迭代器的功能,还可以通过操作符向后移动位置
随机访问迭代器:
组合双向迭代器的功能,还可以向前向后跳过任意个位置,可以直接访问容器中任何位置的元素
双向迭代只能一步一步的走,随机迭代器可以跨很多步走
vector与迭代器的配合使用
vector<int> vecInt; //假设包含1,3,5,7,9元素
vector<int>::iterator it; //声明容器vector<int>迭代器
it = vecInt.begin();
it++ it+=2....
//正向遍历 vector<int> vecInt; for(vector<int>::iterator it=vecInt.begin();it!=vecInt.end();++it) { int tmp = *it; cout<<tmp<<"\t"; } //逆向遍历 for(vector<int>::reverse_iterator it=vecInt.rbegin();it!=vecInt.rend(),++it) { int tmp; cout<<tmp<<"\t"; }
deque容器与迭代器
deque.begin(); //返回容器中第一个元素的迭代器
deque.end(); //返回容器中最后一个元素之后的迭代器
deque.rbegin(); //返回容器中倒数第一个元素的迭代器
deque.rend(); //返回容器中倒数最后一个元素之后的迭代器
for(deque<int>::iterator it=deqInt.begin();it!=deqInt.end(),++it) { cout<<*it; cout<<""; } for(deque<int>::reverse_iterator rit=deqInt.rbegin();rit!=deque.rend();++rit) { cout<<*rit; cout<<""; }