Я пытаюсь использовать итератор, чтобы пройти через набор, а затем что-то сделать с членами этого набора (если они есть).Проблема в том, что обычно это работает, но иногда он сравнивает начало и конец пустого набора и находит, что они не равны.
Интересующий фрагмент кода:
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;}
Спасибоза ваше время.