我有一组类型set<int>,我想得到一个不是开始的地方的迭代器.
我正在做以下事情:
set<int>::iterator it = myset.begin() + 5;
Run Code Online (Sandbox Code Playgroud)
我很好奇为什么这不起作用以及将迭代器放到我想要的地方的正确方法是什么.
R. *_*des 20
myset.begin() + 5;仅适用于随机访问迭代器,迭代器std::set不是.
对于输入迭代器,有以下功能std::advance:
set<int>::iterator it = myset.begin();
std::advance(it, 5); // now it is advanced by five
Run Code Online (Sandbox Code Playgroud)
在C++ 11中,也有std::next类似但不改变其参数的东西:
auto it = std::next(myset.begin(), 5);
Run Code Online (Sandbox Code Playgroud)
std::next需要一个前向迭代器.但既然std::set<int>::iterator是一个双向迭代,都advance和next正常工作.