GeezerVison is showing cpprefjp.github.io — std::iter_swap - cpprefjp C++日本語リファレンス
最終更新日時:
2026年08月25日 12時11分17秒 (JST)
Akira Takahashi
が更新
履歴
編集
function template
<algorithm>
std:: iter_swap
namespace std {
template < class ForwardIterator1 , class ForwardIterator2 >
void iter_swap ( ForwardIterator1 a , ForwardIterator2 b ); // (1) C++98
template < class ForwardIterator1 , class ForwardIterator2 >
constexpr void iter_swap ( ForwardIterator1 a , ForwardIterator2 b ); // (1) C++20
}
概要
2つのイテレータの要素を入れ替える。
要件
a と b は Dereferenceable でなければならない。
*a は *b と Swappable でなければならない。
効果
C++98 : 2つのイテレータaとbが指す値を入れ替える
C++11 : swap (*a, *b)
備考
C++98版の仕様は、以下の2点で問題があった:
std::swap()関数ではなく、汎用的な入れ替え操作を行うようにも読めるため、コンテナに特化した定数時間の入れ替え操作ではなく、線形時間の入れ替えが行われることを許可していた。
std::vector<bool>::iteratorのような、参照のように動作するプロキシオブジェクトを指すイテレータを許可していなかった。
例
#include <algorithm>
#include <iostream>
#include <vector>
#include <iterator>
int main () {
std::vector < int > v1 = { 3 , 1 , 4 };
std::vector < int > v2 = { 4 , 2 , 5 };
std::iter_swap ( v1.begin() + 1 , v2.begin() + 2 );
std::cout << "v1: " ;
std::copy ( v1.begin() , v1.end() , std::ostream_iterator < int > ( std::cout , "," ));
std::cout << std::endl ;
std::cout << "v2: " ;
std::copy ( v2.begin() , v2.end() , std::ostream_iterator < int > ( std::cout , "," ));
std::cout << std::endl ;
}
出力
v1: 3,5,4,
v2: 4,2,1,
実装例
template < class ForwardIterator1 , class ForwardIterator2 >
void iter_swap ( ForwardIterator1 a , ForwardIterator2 b ) {
swap ( * a , * b );
}
参照