1. 程式人生 > >vector中使用迭代器注意事項

vector中使用迭代器注意事項

1.使用iter++;和++iter;兩種方式遍歷的次數是相同的,但在STL中效率不同。前++返回引用,後++返回一個臨時物件,因為iterator是類模板,使用 iter++這種形式要返回一個無用的臨時物件,而it++是函式過載,所以編譯器無法對其進行優化,所以每遍歷一個元素,你就建立並銷燬了一個無用的臨時物件。

2.使用迭代器遍歷時新增刪除元素,可使用以下格式:

for(iter = trial.begin(); iter != trial.end(); )
	{
		if((*iter)->value == min_phi)
		{
			new_ind = 99; new_phi = 99; new_dphi = 99;
			Elem * elem = new Elem(new_ind, new_phi, new_dphi);
			trial.push_back(elem);
			iter = trial.erase(iter);
		}
		else
		{
			cout << "ind = " << (*iter)->img_ind << "  phi = " << (*iter)->value << "  dphi = " << (*iter)->dvalue << endl ;
			iter++;
		}
	}
需要注意的是,這樣push_back進去的元素放在末尾,因此也會在遍歷中被執行。因此,如果new_phi的值等於min_phi,將會變成死迴圈。