2009-06-23 60 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。请务必理解使用此函数模板的性能影响。

相关问题