std::ranges:: iter_swap
|
Определено в заголовке
<iterator>
|
||
|
namespace
ranges
{
inline
namespace
/* unspecified */
{
|
(начиная с C++20)
(объект точки кастомизации) |
|
|
Сигнатура вызова
|
||
|
template
<
class
I1,
class
I2
>
constexpr void iter_swap ( I1 && i1, I2 && i2 ) noexcept ( /* see below */ ) ; |
(начиная с C++20) | |
|
Вспомогательная функция
|
||
|
template
<
class
X,
class
Y
>
constexpr
std::
iter_value_t
<
X
>
|
( только для демонстрации* ) | |
Обменивает значения, обозначенные двумя итераторами.
Эффект вспомогательной функции только для экспозиции
iter-exchange-move
эквивалентен
std::iter_value_t<X> old(std::ranges::iter_move(x)); *x = std::ranges::iter_move(y); return old;
ranges :: iter_swap ( i1, i2 ) является эквивалентным по выражению следующему:
-
(
void
)
iter_swap
(
i1, i2
)
, если
i1
или
i2
имеет тип класса или перечисления и выражение корректно сформировано, где
разрешение перегрузки
для
iter_swapвыполняется с дополнительным кандидатом void iter_swap ( auto , auto ) = delete ; [1] , исключая самуstd::ranges::iter_swap.- Если выбранная перегрузка не обменивает значения, обозначенные i1 и i2 , программа некорректна, диагностика не требуется.
-
В противном случае,
ranges::
swap
(
*
i1,
*
i2
)
, если оба
I1иI2моделируютindirectly_readableи если std:: iter_reference_t < I1 > и std:: iter_reference_t < I2 > моделируютswappable_with. -
В противном случае,
(
void
)
(
*
i1
=
iter-exchange-move( i2, i1 ) ) , если std:: indirectly_movable_storable < I1, I2 > и std:: indirectly_movable_storable < I2, I1 > оба удовлетворены, за исключением того, что i1 вычисляется только один раз. - В противном случае, ranges :: iter_swap ( i1, i2 ) является некорректной, что может привести к ошибке подстановки , когда ranges :: iter_swap ( i1, i2 ) появляется в непосредственном контексте инстанцирования шаблона.
- ↑ Это исключает вызов неограниченного std::iter_swap .
Объекты точек кастомизации
Имя
ranges::iter_swap
обозначает
объект точки кастомизации
, который является константным
функциональным объектом
типа
литерального
semiregular
класса. Для подробностей см.
CustomizationPointObject
.
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Смотрите также
|
(C++20)
|
обменивает объекты, на которые указывают два скорректированных базовых итератора
(function template) |
|
(C++20)
|
обменивает объекты, на которые указывают два базовых итератора
(function template) |
|
обменивает элементы, на которые указывают два итератора
(function template) |