C 迭代器Iterator詳解

2021-09-17 00:19:12 字數 2443 閱讀 2565

用處:指標可以用來遍歷儲存空間連續的資料結構,但是對於儲存空間非連續的,就需要尋找乙個行為類似指標的類,來對非陣列的資料結構進行遍歷。

定義:迭代器是一種檢查容器內元素並遍歷元素的資料型別,提供了對乙個容器中物件的訪問方法(每種容器型別都定義了自己的迭代器型別,如vector:vector< int>:: iterator iter;),並且定義了容器中物件的範圍。

每個容器都定義了自己的迭代器,下面例子中即為vector及其迭代器應用(其他容器的迭代器用法見部落格:c++:各個容器中迭代器的用法)

#include

#include

using namespace std;

intmain()

// 顯示 vec 擴充套件後的大小

cout <<

"extended vector size = "

<< vec.

size()

<< endl;

// 訪問向量中的 5 個值

for(i =

0; i <

5; i++

)// 使用迭代器 iterator 訪問值

vector<

int>

::iterator v = vec.

begin()

;while

( v != vec.

end())

return0;

}

input iterators(輸入):通過對輸入迭代器解除引用(類似於指標*iter)。最嚴格的輸入迭代只能以唯讀方式訪問物件,且只能讀取一次,通常發生在標準輸入裝置(鍵盤)讀取資料時。例如:istream。注意:只能單步向前,也就是說只可以遞增。output iterators(輸出):與 input iterators相似,但只是解除引用讓程式可以修改容器的值*iter=value,不能讀取,且只能寫入一次,通常發生在向標準輸出裝置(印表機或螢幕)寫入資料時。也屬於單步向前迭代器。

forward iterators(正向):可讀可寫,單步向前。

bidirectional iterators(雙向):forward iterators+單步向後。

random access iterators(隨機訪問):集合上述所有迭代器功能,可以像指標一樣進行算術計算。 型別

可用操作列表

input :向前遍歷,唯讀,只能讀取元素一次

*iter: 唯讀訪問對應的元素

iter->member: 唯讀訪問對應元素的成員

++iter: 向前遍歷一步(返回最新的位置)

iter++: 向前遍歷一步(返回原先的位置)

iter1 == iter2: 判斷兩個迭代器是否相等

iter1 != iter2:判斷兩個迭代器是否不等

type(iter): 複製迭代器

output:向前遍歷,只寫,只能寫入元素一次

*iter = value: 向對應的元素寫入新值

++iter: 向前遍歷一步(返回最新的位置)

iter++: 向前遍歷一步(返回原先的位置)

type(iter): 複製迭代器

forward :逐個元素向前,可讀可寫,可訪問元素多次

*iter:; iter->member; ++iter; iter++; iter1 == iter2; iter1 != iter2; type(); type(iter); iter1 = iter2

bidirectional:逐元素向前/向後

++iter; iter++;

random access

bidirectional iterator所有能力特徵

iter[n]: 直接訪問索引為n的元素

iter+=n: 向前或向後(n為負數)遍歷n個元素

iter-=n: 先後或向前(n為負數)遍歷n個元素

iter+n(n+iter): 返回當前位置後面第n個元素的iterator位置

iter-n: 返回當前位置前面第n個元素的iterator位置

iter1-iter2: 返回iter1和iter2之間的距離(distance)

iter1iter1>iter2: 判斷iter1是否在iter2之後

iter1<=iter2: 判斷iter1是否不再iter2之後

iter1>=iter2: 判斷iter1是否不再iter2之前

output iterator寫入資料時,不檢查是否已到達結尾;

forward iterator必須保證訪問元素的有效性;

C 迭代器(Iterator)詳解

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

C 迭代器(Iterator)詳解

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

C 迭代器iterator詳解

目錄 程式設計客棧要訪問順序容器和關聯容器中的元素,需要通過 迭代器 iterator 進行。迭代器是乙個變數,相當於容器和操縱容器的演算法之間的中介。迭代器可以指向容器中的某個元素,通過迭代器就可以讀寫它指向的元素。從這一點上看,迭代器和指標類似。迭代器按照定義方式分成以下四種。定義 容器類名 i...