как получить итератор в определенной позиции вектора - PullRequest
32 голосов
/ 04 августа 2011

Предположим, у меня есть

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;

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

Ответы [ 2 ]

52 голосов
/ 04 августа 2011

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

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

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

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

Или, если вы не используете C ++ 11, advance:

std::vector<int>::iterator iter = v.begin();
std::advance(iter, 10);
38 голосов
/ 04 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...