Почему нет оператора +/- для двунаправленного итератора? - PullRequest
1 голос
/ 11 января 2012

Мои собственные соображения по этому поводу состоят в том, что нет произвольного доступа и нет способа узнать границы.Но тогда почему у нас std::advance?[ПРАВИТЬ] И если подумать, почему нет std::deadvance (из-за отсутствия лучшего слова)?

Ответы [ 3 ]

4 голосов
/ 11 января 2012

Вы правы;для operator+/- необходимо, чтобы это была операция O(1), которая не может быть выполнена двунаправленными итераторами.std::advance не имеет такого требования к скорости (но будет использовать его, когда доступно, например, для итераторов с произвольным доступом).

Обратите внимание, что boost имеет boost::next и boost::prior реализации для итераторов;Я не уверен, какой у них статус по стандартизации, но если он в бусте, то он твердый.

3 голосов
/ 11 января 2012

Рационально для std::advance является то, что должно быть очевидно, что вы действительно намеревались использовать его, даже если это не O (1).

Вам не нужноstd::deadvance, так как вы можете использовать std::advance с отрицательным расстоянием (для двунаправленных итераторов).

2 голосов
/ 11 января 2012

Причина, по которой мы имеем std::advance, заключается в том, что она предоставляет способ продвижения итератора , используя наиболее эффективный способ, поддерживаемый этим итератором .

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