2011-05-01 225 views
5

有一個集合visited。我想檢查從第4到最後的所有元素。 我試圖做這樣的事情獲得集合的第n個元素

int visited_pointer = 4; 
for (set<int>::iterator i_visited=visited.begin()+visited_pointer 
    ; i_visited!=visited.end() 
    ; i_visited++ 
) 

operator+了錯誤。

我該如何以正確的方式做到這一點?

回答

12

operator+的使用僅適用於隨機訪問迭代器。 set迭代器是雙向迭代器。

但功能std::advance可用於移動任何迭代一定數量的地方:

#include <iterator> 

//... 

set<int>::iterator i_visited = visited.begin(); 
for (std::advance(i_visited, visited_pointer) 
    ; i_visited!=visited.end() 
    ; ++i_visited 
) 
2

集不支持隨機訪問迭代器(即支持向迭代器添加值的那些迭代器),所以唯一的方法就是遍歷第一個(不管那可能是什麼意思)四個成員,直到你到達一個你要。對我來說,聽起來像套裝不是你正在嘗試做的任何事情的正確容器。

+0

回覆:「不管這可能意味着」:一組是一個有序的容器,和第一個成員是一個根據該順序首先出現。 – 2011-05-01 17:20:37

+0

@Mike True。我必須承認,我習慣於把套件看作是「小包」,沒有訂單,而套件的訂購功能僅用於保證獨特性。但那只是我。 – 2011-05-01 17:32:25

相關問題