C 迭代器iterator詳解

2022-09-24 17:24:14 字數 2508 閱讀 6129

目錄

程式設計客棧要訪問順序容器和關聯容器中的元素,需要通過「迭代器(iterator)」進行。迭代器是乙個變數,相當於容器和操縱容器的演算法之間的中介。迭代器可以指向容器中的某個元素,通過迭代器就可以讀寫它指向的元素。從這一點上看,迭代器和指標類似。

迭代器按照定義方式分成以下四種。

定義:容器類名::iterator 迭代器名;

定義:容器類名::const_iterator 迭代器名;

定義:容器類名::reverse_iterator 迭代器名;

定義:容器類名::const_reverse_iterator 迭代器名;

通過迭代器可以讀取它指向的元素,*迭代器名就表示迭代器指向的元素。通過非常量迭代器還能修改其指向的元素。

迭代器都可以進行++操作。反向迭代器和正向迭代器的區別在於:

(1)對正向迭代器進行++操作時,迭代器會指向容器中的後乙個元素;

(2)而對反向迭代器進行++操作時,迭代器會指向容器中的前乙個元素。

下面的程式演示了如何通過迭代器遍歷乙個 vector 容器中的所有元素。

#include

#include

using namespace std;

int main()

cout << endl;

//用反向迭代器遍歷容器

for (vector::rluomvthbuneverse_iterator j = vec.rbegin(); j != vec.rend(); ++j)

//rbegin()返回指向容器中最後乙個元素的迭代器,rend()返回指向容器中第乙個元素前面的位置的迭代器,因此本迴圈實際上是從後往前遍歷整個陣列。

cout << *j << " ";

return 0;

}程式的輸出結果是:

0 1 2 3 4

8 6 4 2 0

int& operator++()

int operator++()

第 10 行和第 16 行,寫++i、++j相比於寫i++、j++,程式的執行速度更快。回顧++被過載成前置和後置運算子的例子如下:

cdemo cdemo::operator++ ()

cdemo cdemo::operator ++(int k)

}list 容器的迭代器是雙向迭代器。假設 v 和 i 的定義如下:

list v;

list::const_iterator i;

則以下**是合法的:

for(i=v.begin(); i!=v.end(); ++i)

cout << *i;

以下**則不合法:

for(i=v.begin(); i

因為雙向迭代器不支援用「

for(int i=0; i

因為 list 不支援隨機訪問迭代器的容器,也不支援用下標隨機訪問其元素。

在 c++ 中,陣列也是容器。陣列的迭代器就是指標,而且是隨機訪問迭代器。例如,對於陣列 int a[10],int * 型別的指標就是其迭代器。則 a、a+1、a+2 都是 a 的迭代器。

stl 中有用於操作迭代器的三個函式模板,它們是:

advance(p, n):使迭代器 p 向前或向後移動 n 個元素。

distance(p, q):計算兩個迭代器之間的距離,即迭代器 p 經過多少次 + + 操作後和迭代器 q 相等。如果呼叫時 p 已經指向 q 的後面,則這個函式會陷入死迴圈。

iter_swap(p, q):用於交換兩個迭代器 p、q 指向的值。

要使用上述模板,需要包含標頭檔案 algorithm。下面的程式演示了這三個函式模板的 用法。

#include

#include

#include //要使用操作迭代器的函式模板,需要包含此檔案

using namespace std;

int main()

; list lst(a, a+5);

list ::iterator p = lst.begin();

advance(p, 2); //p向後移動兩個元素,指向3

cout << "1)" << *p << endl; //輸出 1)3

advance(p, -1); //p向前移動乙個元素,指向2

cout << "2)" << *p << endl; //輸出 2)2

list::iterator q = lst.end();

q--; //q 指向 5

cout << "3)" << distanluomvthbunce(p, q) << endl; //輸出 3)3

iter_swap(p, q); //交換 2 和 5

cout << "4)";

for (p = lst.begin(); p != lst.end(); ++p)

cout << *p << " ";

return 0;

}程式的輸出結果是:

3231 5 3 4 2

本文標題: c++迭代器iterator詳解

本文位址:

C 迭代器(Iterator)詳解

迭代器 iterator 的介紹 背景 指標可以用來遍歷儲存空間連續的資料結構,但是對於儲存空間費連續的,就需要尋找乙個行為類似指標的類,來對非陣列的資料結構進行遍歷。定義 迭代器是一種檢查容器內元素並遍歷元素的資料型別。迭代器提供對乙個容器中的物件的訪問方法,並且定義了容器中物件的範圍。迭代器 i...

C 迭代器(Iterator)詳解

1 迭代器 iterator 的介紹 背景 指標可以用來遍歷儲存空間連續的資料結構,但是對於儲存空間非連續的,就需要尋找乙個行為類似指標的類,來對非陣列的資料結構進行遍歷。定義 迭代器是一種檢查容器內元素並遍歷元素的資料型別。迭代器提供對乙個容器中的物件的訪問方法,並且定義了容器中物件的範圍。迭代器...

C 迭代器Iterator詳解

用處 指標可以用來遍歷儲存空間連續的資料結構,但是對於儲存空間非連續的,就需要尋找乙個行為類似指標的類,來對非陣列的資料結構進行遍歷。定義 迭代器是一種檢查容器內元素並遍歷元素的資料型別,提供了對乙個容器中物件的訪問方法 每種容器型別都定義了自己的迭代器型別,如vector vector int i...