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
>
|
( 説明専用* ) | |
2つのイテレータによって示される値を交換します。
説明専用ヘルパー関数
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 ) は以下と expression-equivalent です:
-
(
void
)
iter_swap
(
i1, i2
)
、もし
i1
または
i2
がクラス型または列挙型を持ち、式が well-formed である場合。ただし、
iter_swapの オーバーロード解決 は追加の候補 void iter_swap ( auto , auto ) = delete ; [1] を含めて実行され、std::ranges::iter_swap自体は除外される。- 選択されたオーバーロードが i1 と i2 によって示される値を交換しない場合、プログラムは ill-formed であり、診断は不要である。
-
それ以外の場合、
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 ) は ill-formed となり、これは ranges :: iter_swap ( i1, i2 ) がテンプレートのインスタンス化の直接の文脈に現れる場合、 置換失敗 を引き起こす可能性がある。
- ↑ これは制約のない std::iter_swap の呼び出しを排除する。
カスタマイゼーションポイントオブジェクト
名前
ranges::iter_swap
は
カスタマイゼーションポイントオブジェクト
を表し、これは
関数オブジェクト
のconstな
リテラル
semiregular
クラス型である。詳細は
CustomizationPointObject
を参照。
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
|
(C++20)
|
調整された二つの基盤イテレータが指すオブジェクトを交換する
(関数テンプレート) |
|
(C++20)
|
二つの基盤イテレータが指すオブジェクトを交換する
(関数テンプレート) |
|
二つのイテレータが指す要素を交換する
(関数テンプレート) |