標籤:訪問 strong ons one 指標類型 blog log 簡介 不同
- 迭代器的簡介:
- 迭代器類似於指標類型,它也提供了對對象的間接訪問
- 指標是C語言中就有的東西,而迭代器是C++中才有的
- 迭代器提供一個對容器物件或者string對象訪問的方法,並且定義了容器範圍
- 使用迭代器:
- 和指標不一樣的是,擷取迭代器不是使用取地址符,有迭代器的類型同時擁有返回迭代器的成員,比如,容器都有的成員begin和end,其中begin成員負責返回指向容器第一個元素的迭代器,如:auto b = v.begin();end成員則負責返回指向容器的尾元素的下一個位置的迭代器,也就是說指向的是容器的一個本不存在的尾部。
- 如果容器為空白,則begin和end返回的是同一個迭代器,都是尾後迭代器。
- 迭代器運算子:
1 *iter 返回迭代器iter所指元素的引用2 iter->men 解引用iter並獲得該元素的名為men的成員,相當於(*iter).men3 ++iter 令iter指向容器的下一個元素4 --iter 令iter指向容器的上一個元素5 iter1==iter2 如果兩個迭代器指向的是同一個元素或者指向同一個容器的尾後迭代器,則相等
- 迭代器的類型:
- 實際上擁有迭代器的標準庫類型使用iterator和const_iterator來表示迭代器的類型:
1vector<int>::iterator it;//it可以讀寫vector<int>的元素2string::iterator it2;//it2可以讀寫string對象中的字元3 4vector<int>::const_iterator it3;//it3隻能讀元素,不能寫元素5string::const_iterator it4;//it4隻能讀字元,不能寫字元
-
- const_iterator和常量指標差不多,能讀取但不能修改它所指的元素值,而iterator可讀可寫。如果容器或string對象是一個常量,只能使用const_iterator,如果不是常量,那麼既能使用iterator又能使用const_iterator。
- 如果容器或對象只需讀操作而無需寫操作的話最好使用常量類型(const_iterator),為了便於擷取常量迭代器,C++11新引入了兩個新函數,分別是cbegin和cend,類似於begin和end,不同之乎在於只能返回const_iterator.
- 注意:但凡是使用了迭代器的迴圈體,都不要向迭代器所屬的容器添加元素
- 迭代器運算:
1iter + n 迭代器加上一個數值仍得一個迭代器,所指位置向前移動n個元素2iter - n 迭代器減去一個數值仍得一個迭代器,所指位置向後移動n個元素3iter += n 等價於iter + n4iter -= n 等價於iter - n5iter1 - iter2 兩個迭代器相減的結果是他們之間距離,其類型是名為difference_type的帶正負號的整數6 >、>=、<、<= 位置離begin近的元素較小
C++迭代器