2011-05-01 185 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

相关问题