Подтвердить что ты не робот

Могу ли я увеличить итератор, просто добавив номер?

Можно ли выполнять обычные вычисления с помощью итераторов, т.е. просто увеличивать его, добавляя число?

В качестве примера, если я хочу удалить элемент 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++), но я не уверен, что он будет работать.

4b9b3361

Ответ 1

Это работает, если итератор является итератором с произвольным доступом, итераторы вектора (см. reference). Функция STL std::advance может использоваться для продвижения общего итератора, но поскольку он не возвращает итератор, я стараюсь использовать +, если доступно потому что он выглядит более чистым.

С++ 11 note

Теперь есть std::next и std::prev, которые возвращают итератор, поэтому, если вы работаете в области шаблонов, вы можете использовать их для продвижения общего итератора и по-прежнему иметь чистый код.

Ответ 2

Он работает с итераторами произвольного доступа. В общем, вы можете посмотреть std:: advance, который является более общим. Просто не забудьте понять последствия использования этого шаблона функции.