访问集合的第 n 个元素

发布于 2024-11-04 20:53:57 字数 306 浏览 4 评论 0原文

有一个已访问集合。我想检查从第四个到最后一个的所有元素。 我正在尝试做类似的事情

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

,但在使用 operator+ 时遇到了错误。

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

There is a set visited. And I wanna check all its elements from 4-th to last.
I'm trying to do something like that

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

and got errors with operator+.

How can I do that in the right way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

も让我眼熟你 2024-11-11 20:53:57

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
)

That usage of operator+ is only provided for random-access iterators. set iterators are bi-directional iterators.

But the function std::advance can be used to move any iterator a certain number of places:

#include <iterator>

//...

set<int>::iterator i_visited = visited.begin();
for ( std::advance(i_visited, visited_pointer)
    ; i_visited!=visited.end()
    ; ++i_visited
)
淡笑忘祈一世凡恋 2024-11-11 20:53:57

集合不支持随机访问迭代器(即支持向迭代器添加值的迭代器),因此执行此操作的唯一方法是迭代前四个成员(无论这意味着什么),直到找到所需的成员。在我看来, set 并不是您想要做的任何事情的正确容器。

sets do not support random access iterators (i.e. ones that support adding values to an iterator), so the only way to do this is to iterate through the first (whatever that may mean) four members until you get to the one you want. It sounds to me like set is not the right container for whatever it is you are trying to do.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文