Почему std::reverse(c.begin(), c.end())
требуют, чтобы основной контейнер c
обеспечивает двунаправленный итератор?
Де-факто это будет означать (мульти)map
, (мульти)set
, но те не могут полностью изменить, конечно, потому что они заказаны. Единственный другой би-реж контейнер list
но у этого есть своя собственная функция-член .reverse()
,
Это означает, что можно подать заявку std::reverse
на array
, vector
а также deque
которые произвольный доступ.
Так почему бы не быть «честным» и сказать: требуется произвольный доступ или использовать функцию-член?
Вам даже не нужно переходить к пользовательским итераторам, вы предоставляете ответ на свой вопрос.
Единственный другой би-реж контейнер
list
но у этого есть своя собственная функция-член.reverse()
,
Эта функция-член, однако, переворачивает весь список. std::reverse
допускает обращение только части списка, передавая итераторы, отличные от list.begin()
а также list.end()
,
Это было бы излишне ограничительным для пользовательских итераторов или владельцев монет, использующих двунаправленные итераторы. И поскольку произвольный доступ не требуется, он не должен быть обязательным.