C 指標與迭代器的區別

2021-10-23 10:25:08 字數 1724 閱讀 6799

回答,雖然指標和迭代器很像,比方說都可以++,--去訪問下乙個(當然針對雙向迭代器),都可以+n去訪問某乙個位置的(隨機迭代器),都可以修改迭代器指向物件的值。但是迭代器與指標的完全不同的,就拿遍歷來說,指標的++只是簡單的去增加快大小的位址,這在支援隨機迭代器的容器中是可行的,但是當去遍歷list這種記憶體不連續的來說,就無法只通過簡單的++來實現了,而迭代器是可以++訪問任何容器的,這就表明了迭代器是乙個類模板,只是採用了指標的思想去設計的,迭代器與演算法相結合就可以去操作任何一種容器,而指標就是簡單的記錄位址的乙個變數。第二呢,迭代器比指標有很細緻的劃分,分為不同的迭代器。第三迭代器返回的是乙個類的引用,cout不能直接輸出,只能輸出迭代器指向的值,而指標是可以直接輸出的。第四呢 是迭代器只能指向容器,但是無法指向函式

1、總的說:

1)範圍——指標屬於迭代器的一種(指標可以用來遍歷容器[陣列])

2)功能——迭代器有著比指標更細的劃分並對應能力不同的功能(過載不同的運算子)

比如正向迭代器,雙向迭代器,隨機迭代器(見迭代器劃分)

3)行為——迭代器比指標更統一和良好的用法(更輕易使用begin()和end(),不用擔心越界)。

2、迭代器:

1)迭代器不是指標,是類模板,表現的像指標。模擬了指標的一些功能,通過過載了指標的一些操作符,->,++ --等封裝了指標,是乙個「可遍歷stl( standard template library)容器內全部或部分元素」的物件, 本質是封裝了原生指標,是指標概念的一種提公升(lift),提供了比指標更高階的行為,相當於一種智慧型指標,他可以根據不同型別的資料結構來實現不同的++,–等操作;它只能指向容器,可以對容器提供統一同一的操作,但是指標就不行了,比如指標遍歷vector時,vector底層是連續的記憶體,所以可以++pointer訪問下乙個,但是當遍歷list的時候就不能直接++了,因為list不是連續的記憶體。而iterator就可以,都是++操作訪問下乙個。

充分說明迭代器時類模板這一概念

迭代器實際上是對「遍歷容器」這一操作進行了封裝。

在程式設計中我們往往會用到各種各樣的容器,但由於這些容器的底層實現各不相同,所以對他們進行遍歷的方法也是不同的。例如,陣列使用指標算數就可以遍歷,但鍊錶就要在不同節點直接進行跳轉。

這是非常不利於**重用的。例如你有乙個簡單的查詢容器中最小值的函式findmin,如果沒有迭代器,那麼你就必須定義適用於陣列版本的findmin和適用於鍊錶版本的findmin,如果以後有更多容器需要使用findmin,那就只好繼續新增過載……而如果每個容器又需要更多的函式例如findmax,sort,那簡直就是過載地獄……

我們的救星就是迭代器啦!如果我們將這些遍歷容器的操作都封裝成迭代器,那麼諸如findmin一類的演算法就都可以針對迭代器程式設計而不是針對具體容器程式設計,工作量一下子就少了很多!

至於指標,由於指標也可以用來遍歷容器(陣列),所以指標也可是算是迭代器的一種。但是指標還有其他功能,並不只侷限於遍歷陣列。因為使用指標變數陣列的操作太深入人心,c++stl中的迭代器就是刻意仿照指標來設計介面的

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

3)能一次訪問容器中的各個元素,通過迭代器,容器和演算法可以結合起來,對演算法給與不用的迭代器,就可以對不同容器進行相同的操作,就是上述不同的findmin只需要在迭代器類中實現一次就好了

3、指標:

指標能指向函式,迭代器不行,只能指向容器,指標只能指向某些特定容器。

4、迭代器使用後就釋放了,不能再繼續使用,指標能。

c 指標與迭代器的區別

這是我感覺總結的很好的一篇回答 知乎原回答鏈結 如果只討論 stl container 類的 iterator,它們其實都是一種泛型指標。c風格指標是屬於 iterator 的一種的。iterator 根據功能做了更細的劃分,stl 中的 iterator 分成了五類。我覺得它們的區別 在範圍上,p...

迭代器與指標的區別

迭代器與指標的差別 迭代器 1 迭代器不是指標,是類模板,表現的像指標。他只是模擬了指標的一些功能,通過過載了指標的一些操作符,等封裝了指標,是乙個 可遍歷stl standard template library 容器內全部或部分元素 的物件,本質是封裝了原生指標,是指標概念的一種提公升 lift...

C 迭代器和指標區別

1 總的說 1 範圍 指標屬於迭代器的一種 指標可以用來遍歷容器 陣列 2 功能 迭代器有著比指標更細的劃分並對應能力不同的功能 過載不同的運算子 3 行為 迭代器比指標更統一和良好的用法 更輕易使用begin 和end 不用擔心越界 2 迭代器 1 迭代器不是指標,是類模板,表現的像指標。模擬了指...