c++ - 如何迭代容器的前 N ​​个元素?

标签 c++ loops vector set

我在 C++ 中创建了一组粒子对来保存可能发生碰撞的粒子对,以进行简单的粒子模拟,如下所示:

std::set<std::pair<int, int>> uniquePairs;

填充后,我只想对模拟中的事件粒子进行迭代,以检查它们之间的距离以便稍后进行交互。我可以像这样迭代整个集合......

std::set<std::pair<int,int>>::iterator it;

for (it = uniquePairs.begin(); it != uniquePairs.end(); ++it) 
{
    std::cout << it->first << std::endl;
}

但是,这会引发 vector “超出范围”错误,因为我会尝试访问尚未存活的粒子。因此,我希望能够访问最多相同数量的活粒子的列表..即 N = keywords.size()。

请帮忙,

非常感谢!

最佳答案

问题中并不完全清楚,如果问题是“如何迭代容器的前 N ​​个元素?”,下面是执行此操作的方法。

void foo(std::set<std::pair<int,int>>& uniquePairs, int N) {
    auto it = uniquePairs.begin();
    for (int i = 0; i < N; ++i)
    {
        std::cout << it->first << std::endl;
        ++it;
        assert(it != uniquePairs.end());
    }
}

抄送:https://gcc.godbolt.org/z/tSHQYP

关于c++ - 如何迭代容器的前 N ​​个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54769258/

相关文章:

c++ - 在重载 vector 求和中移动分配

c++ - 检查浮点参数是否正确

c++ - 菜单项是单选样式,而不是MF_CHECKED?

c++ - fread/fwrite 引入垃圾值

c++ - C++ 程序中的形状

javascript - 在jaydata中循环插入数据

loops - SASS 循环选择器

c++ - 如何通过字符串名称访问struct属性?

linux - 如何循环播放堆叠蒙太奇中的所有视频,直到最长视频的持续时间

c++ - 将迭代器初始化为 vector 中的某个位置