c++ - 我如何迭代集合中的替代元素(或跳跃特定大小)?
问题描述
换句话说,我的意思是: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;
}
解决方案
itr+=2 是 c++ 中的有效参数吗?
这取决于容器类型。例如,它对std::vector
or完全有效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))
推荐阅读
- php - foreach 中的 PHP Switch 变量返回 注意:未定义的变量
- css - 当右侧有空间时,展开砌体布局上的列
- javascript - 如何使用反应制作嵌套路由?
- kubernetes - 如何使用带有 eckctl 的 AWS EKS Fargate 集群指定可用区?
- python - convert a time string to time
- python - 在自定义损失函数 keras 中使用 boolean_mask
- python - Python ldap3 搜索何时创建
- python - 使用 Pandas 库的 Python Excel 样式
- javascript - 为什么我的 Future Value 应用程序会立即返回 NaN?
- gulp - 通过带有 DDEV-local 的 Gulp 任务使用 Browsersync