换句话说,我的意思是:itr+=2 是 c++ 中的有效参数吗?,其中(itr 是集合中第一个元素的迭代器)。如果是这样,那么下面的代码应该可以工作: 在这段if代码中,写在/注释部分/的代码功能良好,而不在注释部分的代码则不行。 帮助我迭代替代元素。
#include <bits/stdc++.h>
using namespace std;
int main()
{
set<int> s;
s.insert(5);
s.insert(7);
s.insert(8);
auto it=s.begin();
cout<<*it<<'\n';
it+=2;
cout<<*it<<'\n';
/*for(auto it=s.begin();it!=s.end();it++)
cout<<*it<<" ";*/
return 0;
}
最佳答案
Is itr+=2 a valid argument in c++?
这取决于容器类型。例如,它对于 std::vector
完全有效。或std::array
,但不适用于 std::set
。每个容器由于其性质而提供不同类型的迭代器。 std::set
只提供BidirectionalIterator ,不支持跳过任意数量的元素,仅支持递增和递减。
但是,您可以使用 std::advance()
来自<iterator>
库(或者只是增加迭代器两次)。请注意,绝对不能增加 end()
迭代器,因此需要在循环条件中考虑它。
for(auto it=s.begin(); it != s.end() && it != std::prev(s.end()); std::advance(it, 2))
关于c++ - 我如何迭代集合中的替代元素(或进行特定大小的跳跃)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61770522/