Почему для std :: reverse требуются двунаправленные итераторы?

Почему std::reverse(c.begin(), c.end()) требуют, чтобы основной контейнер c обеспечивает двунаправленный итератор?

Де-факто это будет означать (мульти)map, (мульти)set, но те не могут полностью изменить, конечно, потому что они заказаны. Единственный другой би-реж контейнер list но у этого есть своя собственная функция-член .reverse(),

Это означает, что можно подать заявку std::reverse на array, vector а также deque которые произвольный доступ.

Так почему бы не быть «честным» и сказать: требуется произвольный доступ или использовать функцию-член?

0

Решение

Вам даже не нужно переходить к пользовательским итераторам, вы предоставляете ответ на свой вопрос.

Единственный другой би-реж контейнер list но у этого есть своя собственная функция-член .reverse(),

Эта функция-член, однако, переворачивает весь список. std::reverse допускает обращение только части списка, передавая итераторы, отличные от list.begin() а также list.end(),

3

Другие решения

Это было бы излишне ограничительным для пользовательских итераторов или владельцев монет, использующих двунаправленные итераторы. И поскольку произвольный доступ не требуется, он не должен быть обязательным.

2

По вопросам рекламы [email protected]