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 2.0 中的新功能。迭代器是方法 get 訪問器或運算子,它使您能夠在類或結構中支援 foreach 迭代,而不必實現整個 ienumerable 介面。您只需提供一個迭代器,即可遍歷類中的資料結構。當編譯器檢測到迭代器時,它將自動生成 ienumerable 或 ienumer... 過載運算子和表示式是不一樣的。表示式是按一條語句的整體考慮的,過載實際是函式,按函式思考就對了 c stl迭代器的問題,迭代器只是一個地址麼?會是陣列麼?迭代器不是 地址 它是物件的一個邏輯的位置資訊,不明白你所謂的 陣列 什麼意思,iterator當然指向的是單個物件 cin代表的是一個輸入流,其... 迭代器 iterator 是一種物件,它能夠用來遍歷標準模板庫容器中的部分或全部元素,每個迭代器物件代表容器中的確定的地址。迭代器修改了常規指標的介面,所謂迭代器是一種概念上的抽象 那些行為上像迭代器的東西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用演算法有機的統一起來。迭代...C中的迭代器就是屬性嗎,C 中的迭代器是作什麼用的?
C 的疑問,關於迭代器,C 的一個疑問,關於迭代器
C 標準類中的元素迭代器是什麼意思