1. 程式人生 > >c++迭代器Iterator詳解

c++迭代器Iterator詳解

1 C++ Iterators(迭代器)

迭代器可被用來訪問一個容器類的所包函的全部元素,其行為像一個指標。
舉一個例子,你可用一個迭代器來實現對vector容器中所含元素的遍歷。有這麼幾種迭代器如下:
迭代器 描述
input_iterator   提供讀功能的向前移動迭代器,它們可被進行增加(++),比較與解引用(*)。
output_iterator   提供寫功能的向前移動迭代器,它們可被進行增加(++),比較與解引用(*)。
forward_iterator   可向前移動的,同時具有讀寫功能的迭代器。同時具有input和output迭代器的功能,並可對迭代器的值進行儲存。
bidirectional_iterator   雙向迭代器,同時提供讀寫功能,同forward迭代器,但可用來進行增加(++)或減少(--)操作。
random_iterator   隨機迭代器,提供隨機讀寫功能.是功能最強大的迭代器, 具有雙向迭代器的全部功能,同時實現指標般的算術與比較運算。
reverse_iterator    如同隨機迭代器或雙向迭代器,但其移動是反向的。(Either a random iterator or a bidirectional iterator that moves in reverse direction.)(我不太理解它的行為)
每種容器類都聯絡於一種類型的迭代器。每個STL演算法的實現使用某一型別的迭代器。舉個例子,vector容器類就有一個random - access隨機迭代器,這也意味著其可以使用隨機讀寫的演算法。
既然隨機迭代器具有全部其它迭代器的特性,這也就是說為其它迭代器設計的演算法也可被用在vector容器上。
如下程式碼對vector容器物件生成和使用了迭代器:
#include <iostream>
#include<vector>
using namespace std;

void main(){

	vector<int> the_vector;
	vector<int>::iterator the_iterator;

	for (int i = 0; i < 10; i++)
		the_vector.push_back(i);

	int total = 0;
	the_iterator = the_vector.begin();
	while (the_iterator != the_vector.end()) {
		total += *the_iterator;
		the_iterator++;
	}
	cout << "Total=" << total << endl;
	printf("hello...\n");
	system("pause");
	return;
}
執行結果:
Total=45;
提示:通過對一個迭代器的解引用操作(*),可以訪問到容器所包含的元素。