-
大部分ACM中使用的都是C/C++語言,但是說到C語言和C++語言的區別,卻不知道。
- C++語言用於競賽真的是非常方便的,里面有很多函數還有STL這個好東西,比C語言方便,比其他語言好理解。
- 在C語言中,有指針這個東西,當然在C++中也能用指針,但是其實是不建議在C++中繼續使用C語言的指針,於是C++有了引用傳參這個東西來替代指針。對C++容器的訪問,也就出現了迭代器這么一個東西。
- 迭代器和指針類似,但迭代器更加豐富。
迭代器的操作運算符
-
和指針類似,有以下操作:

1 *iter; //返回迭代器iter所指元素的引用 2 iter->men; //解引用iter並獲得該元素的名為men的成員,相當於(*iter).men 3 ++iter; //令iter指示容器的下一個元素 4 --iter; //令iter指示容器的上一個元素 5 iter1==iter2; // 如果兩個迭代器指示的是同一個元素或者它指向同一個容器的尾后迭代器,則相等.
- 除外迭代器也支持下面幾種操作:

1 iter+n; //迭代器加上一個整數值仍得到一個迭代器,迭代器指示的新位置向前移動了,指示可能是容器的一個元素或者是尾部的下一個位置 2 iter-n; //相反,迭代器指示的位置向后移動了,指示可能是容器的一個元素或者是尾部的下一個位置 3 iter1+=n; //等價於iter1+n 4 iter1-=n; //等價於iter2-n 5 iter1-iter2; //兩個迭代器的距離, 6 >,<,>=,<= //位置離begin近的較小
- 但是得注意 ,后面這幾種操作只有隨機迭代器才支持,具體迭代器的分類下面會講到。
迭代器的類型
-
迭代器一般使用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。