close
Пространства имён
Варианты
Действия

C++ именованные требования: LegacyInputIterator

Материал из cppreference.com
 
 
Именованные требования в C++
Основные
Свойства типа
В масштабах библиотеки
Контейнер
Элементы контейнера
(C++11)

Итератор
Потоковый Ввод/Вывод
Форматтеры
(C++20)
Случайные Числа
(C++11)    
Конкуренция
(C++11)
(C++11)
Диапазоны
Другое
(C++11)


 

LegacyInputIterator это LegacyIterator, который может читать из указателя на элемент. LegacyInputIterator гарантирует адекватность только для алгоритмов одного прохода: как только LegacyInputIterator i был инкрементирован, все копии предыдущего значения могут быть признаны недействительными.

Требования

Тип It удовлетворяет LegacyInputIterator если

И даны:

  • i и j, значения типа It или const It
  • reference, тип, обозначенный как std::iterator_traits<It>::reference
  • value_type, тип, обозначенный как std::iterator_traits<It>::value_type

Следующие выражения должны быть допустимыми и иметь указанные эффекты

Выражение Возвращаемое значение Равнозначное выражение Заметки
i != j является концептуально конвертируемым в bool !(i == j) Precondition: (i, j) находится в области ==.
*i reference, конвертируем в value_type Если i == j и (i, j) находятся в области == тогда это равнозначно *j.

Предусловие: i возможно разыменовать.

Выражение (void)*i, *i равнозначно *i.

i->m (*i).m Предусловие: i возможно разыменовать.
++i It&

Предусловие: i возможно разыменовать.

Постусловие: i возможно разыменовать или i находится после конца последовательности.

Постусловие: Любые копии предыдущего значения i больше не должны быть как возможными к разыменованию,так и могут не быть в области ==.

(void)i++ (void)++i
*i++ преобразумо к value_type value_type x = *i; ++i; return x;

Заметки

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

reference для итератора ввода, который не является также LegacyForwardIterator не обязан быть ссылочного типа: разыменование входного итератора может вернуть прокси объект value_type сам по себе по значению (как в случае с std::istreambuf_iterator).

Концепт

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

<tbody> </tbody>
template<class I> concept __LegacyInputIterator = __LegacyIterator<I> && std::equality_comparable<I> && requires(I i) { typename std::incrementable_traits<I>::difference_type; typename std::indirectly_readable_traits<I>::value_type; typename std::common_reference_t<std::iter_reference_t<I>&&, typename std::indirectly_readable_traits<I>::value_type&>; *i++; typename std::common_reference_t<decltype(*i++)&&, typename std::indirectly_readable_traits<I>::value_type&>; requires std::signed_integral<typename std::incrementable_traits<I>::difference_type>; };

где концепт только для представления __LegacyIterator описан в LegacyIterator#Concept.

(начиная с C++20)

Смотри также

указывает, что тип является итератором ввода, то есть значения, на которые он ссылается, могут быть прочитаны, и он может быть как пре-инкрементирован, так и пост-инкрементирован
(концепт) [править]
Iterator library предоставляет определения для итераторов, свойств итераторов, адаптеров и служебных функций.