首页 > 解决方案 > 我如何迭代集合中的替代元素(或跳跃特定大小)?

问题描述

换句话说,我的意思是:itr+=2 是 c++ 中的有效参数吗?,其中(itr 是集合的第一个元素的迭代器)。如果是这样,那么下面这段代码应该可以工作: 在这段 if 代码中,/ comment section /中编写的代码运行良好,而没有在comment section 中的代码则没有。帮我迭代替代元素。

#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;
}

标签: c++set

解决方案


itr+=2 是 c++ 中的有效参数吗?

这取决于容器类型。例如,它对std::vectoror完全有效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))

推荐阅读