Spec-Zone.ru › C++

C++ требования к именованным типам: LegacyIterator

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

LegacyIterator является базовым набором требований, используемым другими типами итераторов: LegacyInputIterator, LegacyOutputIterator, LegacyForwardIterator, LegacyBidirectionalIterator и LegacyRandomAccessIterator. Итераторы можно рассматривать как абстракцию указателей.

Все категории итераторов требуют только тех функций, которые реализуемы для данной категории за постоянное (амортизированное) время. Поэтому таблицы требований и определения концепций (с C++20) для итераторов не указывают сложность.

Требования

Тип It удовлетворяет требованиям LegacyIterator, если

  • Тип It удовлетворяет CopyConstructible, и
  • Тип It удовлетворяет CopyAssignable, и
  • Тип It удовлетворяет Destructible, и
  • Л-значения типа It удовлетворяют Swappable, и
  • Тип std::iterator_traits<It> имеет определения типов value_type(до C++20), difference_type, reference, pointer, и iterator_category, и
  • При заданном r, л-значении типа It, следующие выражения должны быть допустимыми и иметь указанные эффекты:
Выражение Тип возвращаемого значения Предпосылка
*r неопределено r является дериферируемым
++r It& r является инкрементируемым (поведение выражения ++r определено)

Концепция

Для определения std::iterator_traits, определена следующая концепция только для демонстрации.

template<class I>
concept __LegacyIterator =
    requires(I i)
    {
        {   *i } -> __Referenceable;
        {  ++i } -> std::same_as<I&>;
        { *i++ } -> __Referenceable;
    } && std::copyable<I>;

где концепция __Referenceable<T> для демонстрации удовлетворяется тогда и только тогда, когда T& является допустимым типом (в частности, T не должен быть void).

(с C++20)

Отчёты об ошибках

Следующие отчёты об ошибках, меняющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применимо к Поведение, опубликованное Корректное поведение
LWG 3420 C++20 концепция только для демонстрации проверяет copyable сначала copyable проверяется только если выражение requires истинно

См. также

input_or_output_iterator
(C++20)
указывает, что объекты типа могут быть инкрементированы и дериферированы
(концепция)
Библиотека итераторов предоставляет определения для итераторов, характеристик итераторов, адаптеров и вспомогательных функций

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/Iterator

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API