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

Как получить итератор в определенную позицию вектора

Предположим, что a

std::vector<int> v
//and ...
for(int i =0;i<100;++i) 
 v.push_back(i);

теперь я хочу итератор, пусть, 10-й элемент вектора.

не делая следующий подход

std::vector<int>::iterator vi;
vi = v.begin();
for(int i = 0;i<10;i++)
  ++vi;

поскольку это испортит преимущество использования итератора с произвольным доступом для вектора.

4b9b3361

Ответ 1

Просто добавьте 10 к итератору. Они предназначены для "ощущения", как указатели.

Ответ 2

Это будет работать с любым итератором с произвольным доступом, например, от vector или deque:

std::vector<int>::iterator iter = v.begin() + 10;

Если вам нужно решение, которое будет работать для любого типа итератора, используйте next:

std::vector<int>::iterator iter = std::next(v.begin(), 10);

Или, если вы не используете реализацию С++ 11, advance:

std::vector<int>::iterator iter = v.begin();
std::advance(iter, 10);