首页 > 解决方案 > 使用“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++visual-studio

解决方案


如果您可以使用 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 个元素或全部的子范围。


推荐阅读