1. 程式人生 > >關於set和map迭代器支援的運算

關於set和map迭代器支援的運算

問題:

曾經想遍歷一個set遍歷。當時是這樣寫的:

set<int>::iterator b = a.begin()+1

後來發現程式報錯。究其原因是,set迭代器不支援加減數操作
查看了一下維基百科,下面是有關說明

1.所有迭代器都應該實現自增算符:iter++,++iter

2.Bidirectional迭代器:是在前向迭代器的基礎上,多了單步向後遍歷的能力。也就是–iter,iter–。

3.Random Access迭代器:在雙向迭代器基礎上,具有直接訪問各資料元素的能力。隨機迭代器增加了“迭代器算術運算”:

iter+=i  迭代器遞增i位
iter-
=i 迭代器遞減i位 iter+i 加i位後的迭代器 iter-i 減i位後的迭代器 iter[i] 加i位後的迭代器的解引用 iter<iter1 如果迭代器iter的位置在iter1前,返回true,否則返回false iter<=iter1 如果iter的位置在iter1的前面或同一位置時返回true,否則返回false iter>iter1 如果迭代器iter的位置在iter1後,返回true,否則返回false iter>=iter1 如果iter的位置在iter1的後面或同一位置時返回true,否則返回false

4.在STL定義的容器中,string,vector與deque提供了隨機訪問迭代器,list、set、multiset、map、multimap提供了雙向迭代器。