c++ - 我如何迭代集合中的替代元素(或进行特定大小的跳跃)?

标签 c++ set

换句话说,我的意思是: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/

相关文章:

c++ - 制作一个 VB-dll 并将其加载到 C++ 应用程序中

javascript - 在 Javascript 中使用 Set 删除重复项

Java - Set.contains() 在 OpenJDK 6 上损坏了吗?

python - 这些集合操作是什么,为什么它们会给出不同的结果?

android - ListView 设置第一个可见位置

c++ - 条件语句与 std::atomic<T> 的基本用法

c++ - 在 MSVC 中配置 Qt 项目设置

c++ - 传参积分提升

c++ - 获取发送到 std::cout 的最后一个字符

javascript - 在nodejs中从集合/列表生成有序对