Могу ли я увеличить итератор, просто добавив номер?
Можно ли выполнять обычные вычисления с помощью итераторов, т.е. просто увеличивать его, добавляя число?
В качестве примера, если я хочу удалить элемент 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++), но я не уверен, что он будет работать.
Ответы
Ответ 1
Это работает, если итератор является итератором с произвольным доступом, итераторы вектора (см. reference). Функция STL std::advance
может использоваться для продвижения общего итератора, но поскольку он не возвращает итератор, я стараюсь использовать +, если доступно потому что он выглядит более чистым.
С++ 11 note
Теперь есть std::next
и std::prev
, которые возвращают итератор, поэтому, если вы работаете в области шаблонов, вы можете использовать их для продвижения общего итератора и по-прежнему иметь чистый код.
Ответ 2
Он работает с итераторами произвольного доступа. В общем, вы можете посмотреть std:: advance, который является более общим. Просто не забудьте понять последствия использования этого шаблона функции.