std::ranges::iter_swap
来自cppreference.com
| 在标头 <iterator> 定义
|
||
| |
(C++20 起) (定制点对象) |
|
| 调用签名 |
||
| |
(C++20 起) | |
| 辅助函数 |
||
| |
(仅用于阐述*) | |
交换两个迭代器所代表的值。
仅用于阐述的辅助函数 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_move_storable<I1, I2>和std::indirectly_move_storable<I2, I1>都得到实现,但i1只会求值一次。 - 否则,
ranges::iter_swap(i1, i2)非良构,这在出现于模板实例化的立即语境时能够导致替换失败。
- ↑ 这会阻止调用未受约束的 std::iter_swap。
定制点对象
名字 ranges::iter_swap 代表一个定制点对象,它是某个字面 semiregular 类类型的 const 函数对象。 细节参见定制点对象 (CustomizationPointObject) 。
示例
| 本节未完成 原因:暂无示例 |
参阅
(C++20) |
交换两个调整后的底层迭代器所指向的对象 (函数模板) |
(C++20) |
交换两个底层迭代器所指向的对象 (函数模板) |
| 交换两个迭代器所指向的元素 (函数模板) |