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

関連項目




スポンサーリンク