迭代器
迭代器的簡介
迭代器(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:第一個元素的前一個位置