如何迭代容器的前N个元素? 我在C++中建立了一对对粒子进行潜在碰撞粒子对的粒子模拟如下: std::set<std::pair<int, int>> uniquePairs; std::设置唯一对;

如何迭代容器的前N个元素? 我在C++中建立了一对对粒子进行潜在碰撞粒子对的粒子模拟如下: std::set<std::pair<int, int>> uniquePairs; std::设置唯一对;,c++,loops,vector,set,C++,Loops,Vector,Set,填充后,我只想对模拟中的活动粒子进行迭代,以检查它们之间的距离,以便以后进行交互。我可以像这样迭代整个集合 std::set<std::pair<int,int>>::iterator it; for (it = uniquePairs.begin(); it != uniquePairs.end(); ++it) { std::cout << it->first << std::endl; } std::set::iterat

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

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

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

std::cout first在问题中不是绝对清楚的,如果问题是“如何在容器的前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());
    }
}
void foo(std::set&uniquePairs,int N){
auto it=uniquePairs.begin();
对于(int i=0;istd::首先,我不清楚你在问什么,但我不知道在你所展示的代码中,向量越界错误是如何发生的。所展示的代码中没有向量,你以直接的方式在一个范围内迭代并打印一些
int
s。我们怎么知道你的活粒子是什么?你想迭代吗添加或删除对时设置ur?
for(const auto&p:uniquePairs){std::cout除非for循环的内容比显示的要多,或者您有一个线程正在修改内容,否则迭代器不应该遇到越界事件。即使“alive/dead”表示尚未使用所需的值初始化该对,它内部也应该有可访问的元素,除非s您存储的是指针,而不是实际对象。最好是中断而不是断言,最多有N个,而不仅仅是N个。在循环中使用
'\N'
,而不是
endl
。如果必须的话,您可以
最后刷新
(尽管我不建议这样做)棒极了!这正是我想要的——为了我的目的,迭代容器的前N个元素。