我正在尝试使用迭代器遍历一个集合,然后对该集合的成员(如果有的话)执行某些操作。问题是,通常这是有效的,但有时候,它会比较空集的开始和结束,并发现它们不相等。在C++中使用begin()和end()
感兴趣的代码段是:
for(int i=0;i<input_data.num_particles();i++)
{
//loop through pairs contained in particle i's Verlet list
set<int>::iterator iter;
for(iter=verlet_vars.verlet()[i].begin();iter!=verlet_vars.verlet()[i].end();iter++)
{
//call the force() function to calculate the force between the particles
force(particles.getpart(i),particles.getpart(*iter),input_data,*iter);
}
}
有时,即使)载于verlet_vars.verlet(设定的[i]是空的,程序迭代进行比较,以设定的端部,并发现它们不相等,因此它进入内部循环(最终通过尝试调用force()函数导致程序崩溃)。什么是奇怪的是,如果我做任何迭代器内循环调用之前,喜欢做这样的事情:
iter=verlet_vars.verlet()[i].begin();
那么,对于内环的比较总是返回true,程序正常运行。
P.S.命令verlet_vars.verlet()[I]调用的集合的矢量,因此[I]
的verlet的()函数:
std::vector<std::set<int> > verlet() const {return _verlet;}
感谢您的时间。
这是一个单线程程序吗? 'force()'或'getpart()'是否修改集合? –
您确定要使用'input_data'来确定'verlet_vars.verlet()'中的元素个数吗?为什么不从0到'verlet_vars.verlet()。size()'? –
我们可以看到verlet()函数吗? –