std::incrementable
Определён в заголовочном файле <iterator> | ||
|---|---|---|
template< class I >
concept incrementable =
std::regular<I> &&
std::weakly_incrementable<I> &&
requires(I i) {
{ i++ } -> std::same_as<I>;
};
| (начиная с C++20) |
Этот концепт задаёт требования к типам, которые можно инкрементировать с помощью операторов преинкремента и постинкремента, операции инкремента которых сохраняют равенство, а тип является std::equality_comparable.
В отличие от std::weakly_incrementable, поддерживающих только однопроходные алгоритмы, с типами, моделирующими std::incrementable, можно использовать многопроходные однонаправленные алгоритмы.
Семантические требования
I моделирует std::incrementable, только если для любых двух инкрементируемых объектов a и b типа I:
-
из
bool(a == b)следуетbool(a++ == b), и -
из
bool(a == b)следуетbool(((void)a++, a) == ++b).
Сохранение равенства
Выражения, объявленные в requires-выражениях концептов стандартной библиотеки, должны сохранять равенство (если не указано иное).
См. также
|
(C++20) | задаёт требование, согласно которому тип semiregular можно инкрементировать с помощью операторов преинкремента и постинкремента (концепт) |
|
(C++20) | задаёт требование, согласно которому тип совпадает с другим типом (концепт) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/incrementable