2009-06-23 141 views
34

我可以使用迭代器進行正常的計算嗎,即只是通過添加一個數來增加它?我可以通過添加數字來增加迭代器嗎?

舉個例子,如果我要刪除的元素vec[3],我能做到這一點:

std::vector<int> vec; 
for(int i = 0; i < 5; ++i){ 
     vec.push_back(i); 
} 
vec.erase(vec.begin() + 3); // removes vec[3] element 

這對我的作品(G ++),但我不知道這是否是保證上班。

回答

42

它適用於迭代器是隨機訪問迭代器,哪些向量的迭代器是(請參閱reference)。 STL函數std::advance可用於推進泛型迭代器,但由於它不返回迭代器,所以我傾向於使用+(如果可用),因爲它看起來更乾淨。

C++ 11注

現在有std::nextstd::prev,這返回迭代器,所以如果你是在模板土地工作,你可以用它們來推動通用的迭代,仍然有乾淨的代碼。

+7

哦,所以它不適用於std :: list? – Frank 2009-06-23 14:58:24

2

它適用於隨機訪問迭代器。一般來說,你可能想看看更通用的std::advance。請務必理解使用此函數模板的性能影響。

相關問題