c 中迭代器是什麼意思,c 中的迭代器 歷遍陣列有什麼用 誰能舉例下 用和不用的區別

2022-03-22 05:43:17 字數 4054 閱讀 6438

1樓:匿名使用者

c++中迭代器

c++中的容器

標準序列容器:vector、string、deque、list

標準關聯容器:set、multiset、map、multimap

迭代器的分類

根據迭代器所支援的操作,可以把迭代器分為5類。

1、輸入迭代器:是隻讀迭代器,在每個被遍歷的位置上只能讀取一次。

2、輸出迭代器:是隻寫迭代器,在每個被遍歷的位置上只能被寫一次。

3、前向迭代器:兼具輸入和輸出迭代器的能力,但是它可以對同一個位置重複進行讀和寫。但它不支援operator--,所以只能向前移動。

4、雙向迭代器:很像前向迭代器,只是它向後移動和向前移動同樣容易。

5、隨機訪問迭代器:有雙向迭代器的所有功能。而且,它還提供了「迭代器算術」,即在一步內可以向前或向後跳躍任意位置。

c++容器中提供的迭代器

1、輸入和輸出迭代器的模型分別是建立在針對輸入和輸出流(例如檔案)的讀寫操作基礎上的。所以不難理解,輸入和輸出迭代器最常見的表現形式是 istream_iterator和ostream_iterator。

2、所有的標準stl容器都支援比前向迭代器功能更強大的迭代器。(雜湊容器的一種、單向連結串列容器例外,它們提供前向迭代器)

3、標準關聯容器都提供了雙向迭代器。list也是如此。

4、vector、string、deque都提供了隨機訪問迭代器。指向陣列的內部指標對於陣列來說也是隨機訪問迭代器。

istream_iterator和ostream_iterator使用示例

複製**

// istream_iterator example

#include

#include

using namespace std;

int main ()

複製**

output:

please, insert two values: 2 32

2*32=64

複製**

// ostream_iterator example

#include

#include

#include

using namespace std;

int main ()

複製**

output:

10, 20, 30, 40, 50, 60, 70, 80, 90,

c++中的迭代器 歷遍陣列有什麼用 誰能舉例下 用和不用的區別

2樓:權湛靜

你需要理解什麼是陣列array,什麼是集合iconnection,什麼是ilist開始. 舉個簡單例子: 陣列如 string ar=new string 這是一個簡單字串陣列。

假設我需要提取陣列中的每一個元素,我該怎麼辦呢? 所以那些天才們就想出一種方案,用c#語法表達是: forech(string item in ar) 然後你可以把forech(string item in ar)這種語法理解為迭代器.

專業解釋: 1.迭代器是可以返回相同型別值的有序序列的一段**; 2.

迭代器可用作方法、運算子或get訪問器的**體; 3.迭代器**使用yield return語句依次返回每個元素,yield break將終止迭代; 4.可以在類中實現多個迭代器,每個迭代器都必須像任何類成員一樣有惟一的名稱,並且可以在foreach語句中被客戶端**呼叫; 5.

迭代器的返回型別必須為ienumerable和ienumerator中的任意一種; 6.迭代器是產生值的有序序列的一個語句塊,不同於有一個 或多個yield語句存在的常規語句塊; 7.迭代器不是一種成員,它只是實現函式成員的方式,理解這一點是很重要的,一個通過迭代器實現的成員,可以被其他可能或不可能通過迭代器實現的成員覆蓋和過載; 8.

迭代器塊在c#語法中不是獨特的元素,它們在幾個方面受到限制,並且主要作用在函式成員宣告的語義上,它們在語法上只是語句塊而已;

c++ 的迭代器 中 != 與<

3樓:匿名使用者

簡單的說,stl中,只有隨機迭代器支援《操作,但是所有的五種迭代器都支援!=操作。讀讀《effectivestl》,或者《c標準庫》。不過這個問題很多書上都會講。

4樓:匿名使用者

iterator並不是真正的指標!!!

iterator通過過載++運算子來實現對容器類中下一元素的訪問,而且通過過載引用運算子(&)和解引用運算子(*)使iterator表現出指標的行為。

因此在語句

for(iterator iter=*.begin();iter < *.end();iter++)

中,如果*不是順序容器,在iter未遍歷完容器之前,iter++操作可能導致iter的值大於*.end(),從而使得迴圈出乎意料的結束

5樓:天昊的回憶

因為迭代器中並不是封裝的簡單索引值,所以不能像陣列時 判斷下標小於陣列長度

而且stl容器記憶體空間有時是動態的 因此即使是指標值也不能利用iter < *.end() 而且正如樓上所說的 只有隨即迭代器才支援《和》操作

首先要說明一下 end()返回的是最後一個元素的下一個元素 就可以理解為字串的\0 不過這個元素是不存在的 ,但是呢 只要你移動迭代器(iter++)總會移動到這個結束元素上,表示迭代結束了 因此你只要比較迭代器是否等於end()這個結束元素就行了

c++中的迭代器型別型別實質上是不是一個指標呢?

6樓:廣元修宋夏

指標是迭代器的一種,可以這麼認為。指標視為狹義的迭代器。

迭代器是具有類似指標行為的class

template。也就是過載了operator->operator*

operator++等操作符的類别範本。

指標只能用於某些特定的容器。而迭代器可以適用於所有容器。迭代器的設計就是為了資料結構的泛化。所以迭代器的適用範圍更廣。

c++中迭代器能用在陣列上嗎

7樓:

是可以的。

迭代器可以使用解引用操作符(*操作符)來訪問迭代器所指向的元素(這點與指標類似)

例:*iter=0; //將iter所指向的元素值設定為0

++iter; //指向下一個元素

*iter=1; //將iter所指向的這個元素(剛才設定為0的元素的下一個元素)值設定為0

陣列是由型別名,識別符號和維數的複合資料型別,陣列的維數必須用值大於等於1的常量表示式定義(包含整形字面值常量、列舉常量、用常量表示式初始化的整型const物件)

陣列的操作:

陣列的操作是通過下標操作符來訪問的,在用下標訪問元素時,陣列下標的型別為size_t與vector的迭代器類似,陣列的遍歷也可以用指標來實現指標。

8樓:匿名使用者

不是迭代器不行,而是這句find(ia,ia+6,search_value);返回的是int *, 賦值給迭代器失敗了。

迭代器可以這樣使用:

vectorva(ia, ia + 6);

vector::iterator presult ;

presult = find(va.begin(),va.end(),search_value);

c++中的迭代器是指標變數嗎?

9樓:匿名使用者

我認為你認為的非常正確,迭代器是一種特殊的指標變數,原因是迭代器的產生就是在一個更高的邏輯層次上代替指標,而使得容器元素的操作統一,而且保證更安全。

10樓:

當然不是,而且不僅僅是過載運算子那麼簡單.

11樓:匿名使用者

1、迭代器也可以理解為指標,主要有自增,吸取,相等,不等這四種運算,比指標的功能更強大一些。

2、指標是c語言裡面就有的東西,而迭代器是c++裡面才有的,指標用起來靈活,效率高。迭代器功能更豐富一些(不見得是強大一些),c++的stl裡面很多演算法都是基於迭代器的,一部分演算法的引數可以傳遞指標作為迭代器使用。

c中的0是什麼意思,C 中 0 表示什麼意思

作為接收引數,後面緊跟著的是a1作為傳入值。10 於int a1 a 而int a 10 所以a1 10。裡面的值好比一個索引,而,號後頁的值好比一下陣列,所以在 裡面的0就表示取值的索引是陣列的0位置.0 是後面第一個變數的位置代替。你用什麼除錯的 我用vs c 結果 a原來的值a1 10 a後來...

c中new是什麼意思C中new的用法

c 中new運算子用於動態分配和撤銷記憶體的運算子。new運算子使用的一般格式為new 型別 初值 用new分配陣列空間時不能指定初值。如果由於記憶體不足等原因而無法正常分配空間,則new會返回一個空指標null,使用者可以根據該指標的值判斷分配空間是否成功。一般來說,使用new申請空間時,是從系統...

c 中「!x」是什麼意思,在c 中符號 x是什麼意思

是c 的邏 bai輯運算子,意du思是 非 zhix的意思 對於一個dao命題x如果將專其否定,就得到一個新屬命題,記作 x,讀作 非x 運算子是說明特定操作的符號 它是構造c語言表示式的工具 c語言的運算異常豐富,除了控制語句和輸入輸出以外的幾乎所有的基本操作都作為運算子處理。擴充套件資料 c語言...