我正在嘗試使用迭代器遍歷一個集合,然後對該集合的成員(如果有的話)執行某些操作。問題是,通常這是有效的,但有時候,它會比較空集的開始和結束,並發現它們不相等。在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()函數嗎? –