адаптер для преобразования любого итератора в итератор с произвольным доступом

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

Я не уверен, как использовать boost::iterator_facade как это немного сбивает с толку: — / Есть несколько примеров переполнения стека, но я не уверен, как их использовать ( Вот )

Любая ссылка / пример может быть полезным. (я читал примеры в boost их немного трудно переварить, учитывая мой опыт в boost

0

Решение

Вы не хотите делать это.

Или

  • Используйте обобщенную библиотеку диапазонов со средствами для кэширования «на лету», как Эрик Ниблер Container Ranges концепция из его предложения диапазонов
  • явно закодируйте намерение, например, создавая перегруженную метку для вашей функции, которая «преобразовывает» входной диапазон во временный контейнер для алгоритмов произвольного доступа

Если вы действительно настаиваете, да, вы, вероятно, можете реализовать свою идею, но я не вижу, какую выгоду она получит, кроме сокрытия затрат времени выполнения / хранения. Особенно, это не будет тривиально с необходимостью сохранить жизнь вокруг.


Слегка связано: Boost Spirit имеет boost::spirit::multi_pass адаптер, но это только обновления от InputIterator в ForwardIterator (чтобы разрешить возврат).

¹ (Что вы делаете, когда у вас есть временный объект, который уже является диапазоном произвольного доступа? Вы не можете сохранить ссылку на него, но также не должны копировать его без необходимости).

1

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


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector