Namespaces
Variants

std::ranges:: iter_swap

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
定義先ヘッダ <iterator>
namespace ranges {

inline namespace /* 未規定 */ {
inline constexpr /* 未規定 */
iter_swap = /* 未規定 */ ;
}

}
(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 ( X && x, Y && y )
noexcept ( noexcept ( std:: iter_value_t < X > ( std :: ranges:: iter_move ( x ) ) ) &&

noexcept ( * x = std :: ranges:: iter_move ( y ) ) ) ;
( 説明専用* )

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 です:

  1. ( 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 であり、診断は不要である。
  2. それ以外の場合、 ranges:: swap ( * i1, * i2 ) 、もし I1 I2 の両方が indirectly_readable をモデル化し、かつ std:: iter_reference_t < I1 > std:: iter_reference_t < I2 > swappable_with をモデル化する場合。
  3. それ以外の場合、 ( void ) ( * i1 = iter-exchange-move ( i2, i1 ) ) 、もし std:: indirectly_movable_storable < I1, I2 > std:: indirectly_movable_storable < I2, I1 > の両方がモデル化される場合。ただし、 i1 は一度だけ評価される。
  4. それ以外の場合、 ranges :: iter_swap ( i1, i2 ) は ill-formed となり、これは ranges :: iter_swap ( i1, i2 ) がテンプレートのインスタンス化の直接の文脈に現れる場合、 置換失敗 を引き起こす可能性がある。
  1. これは制約のない std::iter_swap の呼び出しを排除する。

カスタマイゼーションポイントオブジェクト

名前 ranges::iter_swap カスタマイゼーションポイントオブジェクト を表し、これは 関数オブジェクト のconstな リテラル semiregular クラス型である。詳細は CustomizationPointObject を参照。

関連項目

(C++20)
調整された二つの基盤イテレータが指すオブジェクトを交換する
(関数テンプレート)
(C++20)
二つの基盤イテレータが指すオブジェクトを交換する
(関数テンプレート)
二つのイテレータが指す要素を交換する
(関数テンプレート)