我正在尝试使用迭代器来遍历一个集合,然后对该集合的成员执行某些操作(如果有的话)。问题是,通常这是可行的,但有时,它会比较空集的开头和结尾,发现它们不相等。
感兴趣的代码片段是:
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,程序正常运行。
PS 命令 verlet_vars.verlet()[i] 调用集合向量,因此 [i]
verlet() 函数:
std::vector<std::set<int> > verlet() const {return _verlet;}
谢谢你的时间。