Namespaces
Variants

std::experimental::ranges:: Iterator

From cppreference.net
Определено в заголовочном файле <experimental/ranges/iterator>
template < class I >

concept bool Iterator =
requires ( I i ) {
{ * i } - > auto && ; // Требование: i является разыменовываемым
} &&

WeaklyIncrementable < I > ;
(ranges TS)

Концепция Iterator формирует основу таксономии концепций итераторов; каждый итератор удовлетворяет требованиям Iterator .

Сохранение равенства

Выражение называется сохраняющим равенство если оно даёт равные результаты при равных входных данных.

  • Входные данные выражения состоят из его операндов.
  • Выходные данные выражения состоят из его результата и всех операндов, измененных выражением (если таковые имеются).

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

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

Примечания

Iterator сам по себе определяет только операции разыменования и инкрементирования итератора. Большинству алгоритмов потребуются дополнительные операции, например:

Ограничение - > auto && подразумевает, что результирующий тип операции разыменования не может быть void .