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近的元素較小
相關文章
相關標籤/搜索