C++迭代器


  • 迭代器的簡介:
    • 迭代器類似於指針類型,它也提供了對對象的間接訪問
    • 指針是C語言中就有的東西,而迭代器是C++中才有的
    • 迭代器提供一個對容器對象或者string對象訪問的方法,並且定義了容器范圍
  • 使用迭代器:
    • 和指針不一樣的是,獲取迭代器不是使用取地址符,有迭代器的類型同時擁有返回迭代器的成員,比如,容器都有的成員beginend,其中begin成員負責返回指向容器第一個元素的迭代器,如:auto b = v.begin();end成員則負責返回指向容器的尾元素的下一個位置的迭代器,也就是說指向的是容器的一個本不存在的尾部。
    • 如果容器為空,則beginend返回的是同一個迭代器,都是尾后迭代器。
  • 迭代器運算符:
1 *iter    返回迭代器iter所指元素的引用
2 iter->men    解引用iter並獲得該元素的名為men的成員,相當於(*iter).men
3 ++iter    令iter指向容器的下一個元素
4 --iter    令iter指向容器的上一個元素
5 iter1==iter2    如果兩個迭代器指向的是同一個元素或者指向同一個容器的尾后迭代器,則相等
  • 迭代器的類型:
    • 實際上擁有迭代器的標准庫類型使用iteratorconst_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新引入了兩個新函數,分別是cbegincend,類似於beginend,不同之乎在於只能返回const_iterator.
    • 注意:但凡是使用了迭代器的循環體,都不要向迭代器所屬的容器添加元素
  • 迭代器運算:
1iter + n    迭代器加上一個數值仍得一個迭代器,所指位置向前移動n個元素
2iter - n    迭代器減去一個數值仍得一個迭代器,所指位置向后移動n個元素
3iter += n    等價於iter + n
4iter -= n    等價於iter - n
5iter1 - iter2    兩個迭代器相減的結果是他們之間距離,其類型是名為difference_type的帶符號整數
6 >、>=、<、<=    位置離begin近的元素較小

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM