迭代器
迭代器的简介
STL原码剖析一书中这样解释迭代器
迭代器(iterators)是一种抽象的设计概念,实现程序语言中并没有直接对应于这个概念的实物。<>一书提供有23个设计模式(design patterns)的完整描述,其中iterator 模式如下:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式。
(1):每种容器类型都定义了自己的迭代器类型,如string: string::iterator sit; 这条语句定义了一个名为sit的变量,它的数据类型是由string定义的iterator类型
使用迭代器读取string中的每一个元素
string s("hello bit!");
string::iterator sit = s.begin();
while (sit != s.end()){
cout << *sit;
++sit;
}
2.const(只读)迭代器
只能读取容器中的元素,而不能修改。
string::const_iterator sit = s.begin();
cout << "NO_2:" << " ";
while (sit != s.end()){
cout << *sit ;
++sit;
}
在const迭代器使用的过程中,只能在遍历的时候读取元素不能对容器中的元素进行修改
(3):反向迭代器
反向遍历容器中的元素
string s("hello bit!")
string::const_reverse_iterator sit = s.rbegin();
cout << "NO_3:" << " ";
while (sit != s.rend()){
cout << *sit;
++sit;
//从字符串的末尾开始遍历元素,语句上看着是++sit,
//而内部实现却是--;
}
rbegin指向最后一个位置
rend指向第一个位置的前一个位置
一个典型的迭代器的使用的例子
#include<iostream>
#include<string>
#include<vector>
#include<list>
using namespace std;
//const迭代器的使用
void printString(const string &s){
string::const_iterator sit = s.begin();
cout << "NO_2:" << " ";
while (sit != s.end()){
cout << *sit ;
++sit;
}
cout << endl;
}
//反向迭代器
void printRString(const string &s){
string::const_reverse_iterator sit = s.rbegin();
cout << "NO_3:" << " ";
while (sit != s.rend()){
cout << *sit;
++sit;
//看着是++,内部是--
}
cout << endl;
}
//rbegin指向最后一个位置
//rend指向第一个位置的前一个位置
//普通迭代器
void testiterator(){
string s("hello bit!");
string::iterator sit = s.begin();
cout << "NO_1:" << " ";
while (sit != s.end()){
cout << *sit;
++sit;
}
cout << endl;
printString(s);
printRString(s);
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
vector <int>::iterator vit = v.begin();
while (vit != v.end()){
cout << *vit;
++vit;
}
cout << endl;
}
int main(){
testiterator();
return 0;
}
程序运行结果
【迭代器】:
涉及模式:访问机制
在外部:看作指针使用,内部实现上,不同容器有
不同的实现方式不一定是原生指针
【迭代器分类】
1.正向迭代器(可读可写)
2.方向迭代器(可读可写)
3.const迭代器(只读)
【小结】
begin:第一个元素的位置
end:最后一个元素的下一个位置
rbegin:最后一个元素的位置
rend:第一个元素的前一个位置