C的迭代器中與,C 中迭代器的加減

2022-03-14 13:25:55 字數 3545 閱讀 1912

1樓:匿名使用者

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

2樓:匿名使用者

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

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

因此在語句

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

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

3樓:天昊的回憶

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

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

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

c++中迭代器的加減

4樓:榮順綦濟

作者的意思是iter1 += n,n應該是個自然數,迭代器之間沒有加法的操作,減法也沒有組合式的操作,這裡是stl的隨機訪問迭代器所支援的操作,你可以看一下: https://wenwen.

5樓:匿名使用者

您看的書是不是c++ primer?

那本書上確實有這樣的語句,但我覺得是編寫錯誤的。

iterator所支援的-=操作應該是ite2 -= n;這裡n是一個常量。

看看原始碼中的原型:

__normal_iterator&

operator-=(const difference_type& __n)

可以看到形參是一個difference_type型別的變數,而沒有迭代器型別形參。

所以要麼是編寫錯誤,要麼新的stl支援這種操作。但我覺得後面一種可能性不大。

因為ite2-ite1得到一個常量,再賦值給ite2是不合常理的。

c++中迭代器是什麼意思?

6樓:匿名使用者

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++迭代器與指標。

7樓:

迭代器一般用於容器中的,是一種特殊指標,

#include

#include

using namespace std;

struct data

;int main()

vector::iterator iter=obm.end()-1;

while(iter!=obm.begin())num+=(*iter).x*(*iter).y;

cout<<"輸出為:"<

return 0;

}這是我剛寫的**。用到的迭代器指標

8樓:匿名使用者

迭代器 主要 是實現 泛型程式設計

stl 已經實現了很多泛型演算法。具體可以看下 侯捷的stl分析

c++迭代器的用法

9樓:it孤鶩

你的cpoints是這個樣子的嗎?

class point

;class cpoints

;it_point->second.z

意思就是指向second點的成員z的值

10樓:ai看雪

c++ 迭代器有點類似於指標, cpoints應該是一個存放結構體的容器,所以有second.z

11樓:匿名使用者

it_point->second.z 中

it_point 是迭代器, 可以理解成訪問指標second 是 結點裡面的 資料, 看字面意思, 應該是一個class 或者 struct

z 就是 second 裡面的一個資料

C中的迭代器就是屬性嗎,C 中的迭代器是作什麼用的?

不是。迭代器是 c 2.0 中的新功能。迭代器是方法 get 訪問器或運算子,它使您能夠在類或結構中支援 foreach 迭代,而不必實現整個 ienumerable 介面。您只需提供一個迭代器,即可遍歷類中的資料結構。當編譯器檢測到迭代器時,它將自動生成 ienumerable 或 ienumer...

C 的疑問,關於迭代器,C 的一個疑問,關於迭代器

過載運算子和表示式是不一樣的。表示式是按一條語句的整體考慮的,過載實際是函式,按函式思考就對了 c stl迭代器的問題,迭代器只是一個地址麼?會是陣列麼?迭代器不是 地址 它是物件的一個邏輯的位置資訊,不明白你所謂的 陣列 什麼意思,iterator當然指向的是單個物件 cin代表的是一個輸入流,其...

C 標準類中的元素迭代器是什麼意思

迭代器 iterator 是一種物件,它能夠用來遍歷標準模板庫容器中的部分或全部元素,每個迭代器物件代表容器中的確定的地址。迭代器修改了常規指標的介面,所謂迭代器是一種概念上的抽象 那些行為上像迭代器的東西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用演算法有機的統一起來。迭代...