【问题标题】:access to nth element of set访问集合的第 n 个元素
【发布时间】:2011-05-01 11:19:36
【问题描述】:

有一个集合visited。我想检查它从 4 到最后的所有元素。 我正在尝试做类似的事情

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

operator+ 出现错误。

我怎样才能以正确的方式做到这一点?

【问题讨论】:

    标签: c++ stl set


    【解决方案1】:

    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】:

      sets 不支持随机访问迭代器(即支持向迭代器添加值的迭代器),因此唯一的方法是遍历第一个(无论这可能意味着什么)四个成员,直到你到达你想要的那个想。在我看来, set 不是你想要做的任何事情的正确容器。

      【讨论】:

      • 回复:“不管这意味着什么”:一个集合是一个有序的容器,第一个成员是根据该顺序排在第一位的那个。
      • @Mike True。我必须承认,我习惯于将集合视为 smalltalk “包”,没有顺序,集合的排序功能仅用于保证唯一性。但这只是我。
      猜你喜欢
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 2017-03-19
      • 2019-06-29
      相关资源
      最近更新 更多