Какой контейнер STL я должен использовать, чтобы пройтись по дереву? - PullRequest
2 голосов
/ 28 июня 2011

Я не знаю, означает ли двунаправленность, что я могу написать rbegin () или я могу уменьшить итератор.

У меня есть дерево, которое только вперед, и это не проблема. Я хотел бы идти это, которое есть. В данный момент я каждый раз, когда посещаю ветку, нажимаю current_iterator. Теперь проблема в том, что я перебираю ветку и вызываю функцию. Функция должна посетить предыдущие узлы в списке.

Итак, я написал it=current_iterator и планирую написать --it для перемотки. В качестве быстрого теста я написал --o.begin()==o.end(), чтобы посмотреть, смогу ли я это сделать. Я получил ошибку подтверждения.

Я использую deque. Какой контейнер я мог бы использовать, чтобы я мог написать = на интеграторе, идти вперед и назад, находясь в середине итерации? Кажется, мне нужно сохранить копию o, чтобы я мог сравнить .begin() и .end(). Какая рекомендуемая тара и техника?

1 Ответ

4 голосов
/ 28 июня 2011

Итераторы Deque имеют произвольный доступ.Вы можете увеличивать и уменьшать их.

Возможно, проблема в том, что вы пытались уменьшить итератор, возвращаемый на begin.Это не гарантирует вам конец списка - заявки не являются круговыми.(Я думаю, что это неопределенное поведение, поэтому может дать вам конец, но я сомневаюсь, что любые реализации на самом деле делают это так.)

Другими словами, ваш тест на то, можете ли вы уменьшитьитераторы не были действительным тестом;вывод, который вы сделали из этого, что вы не можете уменьшить число итераторов, также неверен.Вы можете уменьшить значение любого допустимого итератора deque, если новое местоположение также будет действительным.

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