我可以使用迭代器進行正常的計算嗎,即只是通過添加一個數來增加它?我可以通過添加數字來增加迭代器嗎?
舉個例子,如果我要刪除的元素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 ++),但我不知道這是否是保證上班。
我可以使用迭代器進行正常的計算嗎,即只是通過添加一個數來增加它?我可以通過添加數字來增加迭代器嗎?
舉個例子,如果我要刪除的元素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 ++),但我不知道這是否是保證上班。
它適用於迭代器是隨機訪問迭代器,哪些向量的迭代器是(請參閱reference)。 STL函數std::advance
可用於推進泛型迭代器,但由於它不返回迭代器,所以我傾向於使用+(如果可用),因爲它看起來更乾淨。
C++ 11注
現在有std::next
和std::prev
,這做返回迭代器,所以如果你是在模板土地工作,你可以用它們來推動通用的迭代,仍然有乾淨的代碼。
它適用於隨機訪問迭代器。一般來說,你可能想看看更通用的std::advance。請務必理解使用此函數模板的性能影響。
哦,所以它不適用於std :: list? – Frank 2009-06-23 14:58:24