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