std::ranges:: iter_swap
|
定义于头文件
<iterator>
|
||
|
namespace
ranges
{
inline
namespace
/* 未指定 */
{
|
(C++20 起)
(定制点对象) |
|
|
调用签名
|
||
|
template
<
class
I1,
class
I2
>
constexpr void iter_swap ( I1 && i1, I2 && i2 ) noexcept ( /* 见下文 */ ) ; |
(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
类类型的常量
函数对象
。详细信息请参阅
定制点对象
。
示例
|
本节内容不完整
原因:缺少示例 |
参见
|
(C++20)
|
交换两个已调整底层迭代器所指向的对象
(函数模板) |
|
(C++20)
|
交换两个底层迭代器所指向的对象
(函数模板) |
|
交换两个迭代器所指向的元素
(函数模板) |