std::swap
提供: C++入門
スポンサーリンク
std::swapは、2つのオブジェクトの値を入れ替える、テンプレート関数です。一般的な型に加え、std::vectorなどのコンテナやstd::unique_ptrなどのスマートポインタのスワップも可能です。
読み方
- std::swap
- えすてぃーでぃー すわっぷ
目次
概要
std::swap は、2つのオブジェクトの値を交換します。
たとえば、こういったコードをわざわざ書くことはありません。
int a = 0, b = 100, t; t = a; a = b; b = t;
上記は、こうなります。
int a = 0, b = 100; std::swap(a,b);
ヘッダファイル
#include <algorithm> // C++11以前 #include <utility> // C++11から
std::swapのシンプルな例
ソースコード std_swap.cpp
#include <iostream> // std::cout #include <utility> // std::swap int main(int argc, char *argv[]) { int x = 10, y = 20; std::swap (x, y); std::cout << "x=" << x << " y=" << y << std::endl; return 0; }
コンパイル
c++ std_swap.cpp -o std_swap
実行例
% ./std_swap x=20 y=10
配列を swap する例
ソースコード std_swap_2.cpp
#include <iostream> // std::cout #include <utility> // std::swap int main(int argc, char *argv[]) { int foo[4]; // ? ? ? ? int bar[] = {10,20,30,40}; std::swap (foo, bar); // foo: 10 20 30 40 // bar: ? ? ? ? for ( int i: foo ) { std::cout << ' ' << i; } std::cout << std::endl; return 0; }
コンパイル
g++48 -std=c++11 std_swap_2.cpp -o std_swap_2
実行例
% ./std_swap_2 10 20 30 40
ベクターコンテナを入れ替える例
std_swap_3.cpp
std::vectorの初期化には、C++11で導入された std::initializer_list を使用しています。以下のコードは、C++14に対応したコンパイラが必要です。
/* * std_swap_3.cpp * Copyright (C) 2015 kaoru <kaoru@localhost> */ #include <utility> #include <string> #include <iostream> #include <vector> void print(auto container) { for (auto x: container) { std::cout << x << " "; } std::cout << std::endl; } int main(int argc, char const* argv[]) { std::vector<std::string> v1 {"a","b","c"}, v2 {"x","y","z"}; std::swap(v1, v2); print(v1); print(v2); return 0; }
コンパイル
c++49 -std=c++14 std_swap_3.cpp
実行例
$ ./a.out x y z a b c
関連項目
ツイート
スポンサーリンク