STL迭代器

  • 大部分ACM中使用的都是C/C++語言,可是說到C語言和C++語言的區別,殊不知道。c++

  • C++語言用於競賽真的是很是方便的,裏面有不少函數還有STL這個好東西,比C語言方便,比其餘語言好理解。
  • 在C語言中,有指針這個東西,固然在C++中也能用指針,可是實際上是不建議在C++中繼續使用C語言的指針,因而C++有了引用傳參這個東西來替代指針。對C++容器的訪問,也就出現了迭代器這麼一個東西。
  • 迭代器和指針相似,但迭代器更加豐富。 

迭代器的操做運算符

  • 和指針相似,有如下操做:ide

1 *iter;      //返回迭代器iter所指元素的引用
2 iter->men;  //解引用iter並得到該元素的名爲men的成員,至關於(*iter).men
3 ++iter;     //令iter指示容器的下一個元素
4  --iter;      //令iter指示容器的上一個元素
5 iter1==iter2; // 若是兩個迭代器指示的是同一個元素或者它指向同一個容器的尾後迭代器,則相等.
View Code
  • 除外迭代器也支持下面幾種操做:
1 iter+n;           //迭代器加上一個整數值仍獲得一個迭代器,迭代器指示的新位置向前移動了,指示多是容器的一個元素或者是尾部的下一個位置
2 iter-n;          //相反,迭代器指示的位置向後移動了,指示多是容器的一個元素或者是尾部的下一個位置
3 iter1+=n;   //等價於iter1+n
4 iter1-=n;    //等價於iter2-n
5 iter1-iter2;  //兩個迭代器的距離,
6 >,<,>=,<= //位置離begin近的較小
View Code
  • 可是得注意 ,後面這幾種操做只有隨機迭代器才支持,具體迭代器的分類下面會講到。

迭代器的類型

  • 迭代器通常使用iterator 和  const_iterator兩種類型,區別應該看名稱也能猜出來,後者只能進行讀取操做,而不能修改值。函數

  • c++11中,引入了兩個新函數,cbegin和cend,這兩個函數能直接返回 const_iterator 類型的迭代器,方便操做。

迭代器的分類

  • 每種容器都有本身的迭代器類型。
  • 只有Vector 和 Deque 的迭代器類別爲隨機訪問,而其餘map,set,list都只支持雙向迭代器
  • 兩者的區別就是隨機迭代器支持+=n(n爲常數)的運算,而雙向迭代器只能自增自減。(固然你能夠本身重載雙向迭代器的+=操做)

迭代器的使用

  • 對於每種容器,使用迭代器方法是同樣的,例如對vector而言:
1 vector<int>::itertor it;  //定義了一個隨機迭代器
2 vector<int>::const_itertor iter;  //定義了一個只讀的隨機迭代器
  • 對於其餘容器使用方法同上,特別的是,C++的String類型也支持隨機迭代器的形式。

容器中的大部分函數以及操做,都是基於迭代器完成的。因此學會使用迭代器是學習C++的一個必經之路。學習

值得一提的是,既然使用C++語言,就要徹底利用C++語言的方便性,而不是僅僅只使用一個cin或者cout。spa

相關文章
相關標籤/搜索