Как обнаружить смежные итераторы, если нет std::contigious_iterator_tag?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Как обнаружить смежные итераторы, если нет std::contigious_iterator_tag?

Сообщение Гость »


В C++17 появилась концепция ContigiousIterator http://en.cppreference.com/w/cpp/iterator. Однако, похоже, не планируется иметь contigious_iterator_tag (точно так же, как сейчас у нас есть random_access_iterator_tag), сообщаемый std::iterator_traits ::iterator_category.

Почему отсутствует contigious_iterator_tag?

Существует ли общепринятый протокол для определения того, является ли итератор непрерывным? Или тест времени компиляции?

Ранее я упоминал, что для контейнеров, если есть элемент .data(), который преобразуется в указатель на ::value type и есть член .size(), конвертируемый в различия указателей, то следует предположить, что контейнер является смежным, но я не могу использовать аналогичную функцию итераторов.

Одним из решений может быть создание функции data для смежных итераторов.

Конечно, концепция непрерывности работает, если &(it[n]) == (&(*it)) + n, для всех n, но это может не проверяется во время компиляции.

РЕДАКТИРОВАТЬ: я нашел это видео, в котором это рассматривается в более широком контексте концепций C++. CppCon 2016: «Построение и расширение иерархии итераторов в современном многоядерном мире», Патрик Нидзельски. В решении используются концепции (Lite), но в конце концов идея состоит в том, что смежные итераторы должны реализовывать функцию pointer_from (такую ​​же, как моя функция data(...)).< /п> Вывод таков: концепции помогут формализовать теорию, но они не являются волшебством в том смысле, что кто-то где-то будет определять новые функции с особыми именами над итераторами, которые являются смежными. Речь распространяется на сегментированные итераторы (с соответствующими функциями segment и local), но, к сожалению, ничего не говорится о пошаговых указателях.

РЕДАКТИРОВАТЬ 2020:

Теперь в стандарте есть

struct contigious_iterator_tag: public random_access_iterator_tag { }; https://en.cppreference.com/w/cpp/itera ... rator_tags
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему итераторы `std :: views :: смежные итераторы увеличивают все базовые итераторы вместо использования более эффекти
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Почему итераторы `std :: views :: смежные итераторы увеличивают все базовые итераторы вместо использования более эффекти
    Anonymous » » в форуме C++
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Диапазон на основе пары
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Как можно привести Iterator к Iterator?
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как можно привести Iterator к Iterator?
    Anonymous » » в форуме JAVA
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»