доступ к n-му элементу множества - PullRequest
5 голосов

Есть набор visited. И я хочу проверить все его элементы от 4-го до последнего. Я пытаюсь сделать что-то подобное

int visited_pointer = 4;
for ( set<int>::iterator i_visited=visited.begin()+visited_pointer
    ; i_visited!=visited.end()
    ; i_visited++
)

и получил ошибки с operator+.

Как я могу сделать это правильно?

Ответы [ 2 ]

12 голосов
/ 01 мая 2011

Это использование operator+ предоставляется только для итераторов с произвольным доступом. set итераторы являются двунаправленными итераторами.

Но функцию std::advance можно использовать для перемещения любого итератора на определенное количество мест:

#include <iterator>

//...

set<int>::iterator i_visited = visited.begin();
for ( std::advance(i_visited, visited_pointer)
    ; i_visited!=visited.end()
    ; ++i_visited
)
2 голосов
/ 01 мая 2011

наборы не поддерживают итераторы с произвольным доступом (т. Е. Те, которые поддерживают добавление значений в итератор), поэтому единственный способ сделать это - перебрать первые (что бы это ни значило) четыре члена, пока не дойдете до того, который вы хочу. Мне кажется, что set - это не тот контейнер, который вы пытаетесь сделать.

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