c++ - 使用“std::set”,获取元素
问题描述
在我的代码中,我使用了一个数组,我决定尝试 std :: set。我用一个数组做到了这一点:
for (int i=0; i<100; i++)
{
drawNMS(true, myMassive[myStr+i]);
}
myStr 由按钮添加。对于std :: set,据我了解,我需要使用迭代器。我尝试这样做:
std::set <int>::iterator iter;
for(iter=mySet.begin(); iter!=mySet.end();iter++)
{
drawNMS(true, myStr+*iter);
}
在哪里正确插入 (int i = 0; i <100; i ++) 以便最终结果与使用数组时一样?
解决方案
如果您可以使用 C++20,则有 std::ranges 提供适用于边界的std::ranges::advance,因此可以像这样找到您的结束迭代器(未经测试):
auto endSet100 = std::ranges::advance(mySet.begin(), 100, mySet.end());
这个结束迭代器可以像原来的结束迭代器一样使用。如果您使用 std::advance,您必须自己进行边界检查,并且提前在迭代器本身上工作,而不返回新的迭代器。
对于更简单的循环:
for (const auto& elem: std::ranges::subrange(mySet.begin(), std::ranges::advance(mySet.begin(), 100, mySet.end()))
{
drawNMS(true, myStr+elem);
}
它可能会更长一些,但它指出:如果存在较少的元素,则循环从开始到第 100 个元素或全部的子范围。
推荐阅读
- google-chrome - 添加 COEP 标头后,Recaptcha V2 无法正常工作(跨源隔离)
- html - 有没有办法在 matlab uihtml 组件中获取文件?
- reactjs - 如何在选择选项中显示数据库中的数据?
- node.js - AWS Cloudfront Lambda@Edge Origin 请求触发时间长于函数显示
- amazon-web-services - 无法承担访问 AWS 中的 EC2 实例的角色
- awk - AWK 命令返回单列上的数据并将数据连接到每个结果的单行中
- java - Confluent Platform 中的 Kafka 心跳相关日志在哪里?
- html - 如何在 Prestashop 1.6 Megamenu 的 URL 类型菜单中添加文本框?
- vue.js - 使用 kendo-grid columns 属性的自定义 Kendo Vue Grid Wrapper 列模板
- java - 如何找到两个java列表之间的区别?