迭代器

迭代器

迭代器的簡介

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章