C 迭代器iterator和指標

2021-10-03 19:41:17 字數 1740 閱讀 1919

1.指標和iterator都支援與整數進行+,-運算,而且其含義都是從當前位置向前或者向後移動n個位置

2.指標和iterator都支援減法運算,指標-指標得到的是兩個指標之間的距離,迭代器-迭代器得到的是兩個迭代器之間的距離

3.通過指標或者iterator都能夠修改其指向的元素

指標是c語言裡面就有的東西,而迭代器是c++裡面才有的。

以下改自:

1)迭代器不是指標,是類模板,表現的像指標。他只是模擬了指標的一些功能,通過過載了指標的一些操作符,->,,+± -等封裝了指標,是乙個「可遍歷stl( standard template library)容器內全部或部分元素」的物件, 本質是封裝了原生指標,是指標概念的一種提公升(lift),提供了比指標更高階的行為,相當於一種智慧型指標,他可以根據不同型別的資料結構來實現不同的++,–等操作;

(2)迭代器返回的是物件引用而不是物件的值,所以cout只能輸出迭代器使用*取值後的值而不能直接輸出其自身。

(3)在設計模式中有一種模式叫迭代器模式,簡單來說就是提供一種方法,在不需要暴露某個容器的內部表現形式情況下,使之能依次訪問該容器中的各個元素,這種設計思維在stl中得到了廣泛的應用,是stl的關鍵所在,通過迭代器,容器和演算法可以有機的粘合在一起,只要對演算法給予不同的迭代器,就可以對不同容器進行相同的操作。

ite =

find

(vec.

begin()

, vec.

end(),

88);vec.

insert

(ite,2,

77);//迭代器標記的位置前,插入資料;

cout <<

*ite << endl;

//會崩潰,因為迭代器在使用後就釋放了,*ite的時候就找不到它的位址了;

注:迭代器使用完並不總是失效。

指標:指標能指向函式而迭代器不行,迭代器只能指向容器。

總之,指標和迭代器是有很大差別的,雖然他們表現的行為相似,但是本質是不一樣的!乙個是類模板,乙個是存放乙個傢伙的位址的指標變數

迭代器的類成員就是指標,是由幾個指標構成的

迭代器緊密依賴於容器,迭代器是由容器來提供的。一般來講,容器裡定義迭代器的具體實現細節。

大多數容器都有迭代器,但不是所有的容器都有迭代器。比如,stack和queue這種容器就不提供迭代器。因為stack和queue需要根據一定的規則輸入資料和輸出資料,不可以通過迭代器遍歷。

迭代器的分類

迭代器的行為如指標,到處跳,表示乙個位置,我們一般分類是依據他的跳躍能力,每個分類是乙個對應的struct定義。

輸出型迭代器

輸入型迭代器

前向迭代器

雙向迭代器

隨機訪問迭代器

迭代器可以宣告如下格式:

iterator: 前向遍歷,可讀可寫

const_iterator: 前向遍歷,唯讀

reverse_iterator: 後向遍歷,可讀可寫

const_reverse_iterator:後向遍歷,唯讀

迭代器函式:

函式begin()返回乙個迭代器指向容器的第乙個元素。

函式end()返回乙個迭代器指向容量的最後乙個元素的下一位置。

函式rbegin()返回反向迭代器的開始,即指向原容器的最後乙個元素。

函式rend()返回反向迭代器的最後乙個元素的下乙個位置,即指向原容器的第乙個元素之前的位置。

c 迭代器iterator 和 vector

初始化vector vectorv1 vectorv2 v1 vectorv3 n,i v3包含了n個值為i的元素 vectorv4 n v4含有初始化元素的n個副本 empty 判斷向量是否為空 begin 返回向量迭代器的首元素 end 返回向量迭代器末元素的下乙個元素 front 返回第乙個資...

C 迭代器(Iterator)詳解

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

C 迭代器(Iterator)詳解

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