2015年5月28日木曜日

swap(C++)

swapは2つのオブジェクトの値を交換するときに使われるが、オブジェクトによって実装が異なるので動作に注意すること。

//
// swap.cpp
// CplusplusPractice
//
// Created by masai on 2015/05/28.
// Copyright (c) 2015年 masai. All rights reserved.
//
#include <iostream>
#include <string>
#include <vector>
int main(int argc, char* argv[]){
// プリミティブ型
int a, b;
a = 10;
b = 20;
std::swap(a, b);
std::cout << a << std::endl;
std::cout << b << std::endl;
// array
int array_a1[4] = {10, 20, 30, 40}, array_b1[4] = {1,2,3,4};
std::swap(array_a1, array_b1);
for(auto i : array_a1){
std::cout << i << std::endl;
}
for(auto i : array_b1){
std::cout << i << std:: endl;
}
// array2
int array_a2[4] = {10, 20, 30, 40}, array_b2[4];
std::swap(array_a2, array_b2);
for(auto i : array_a2){
std::cout << i << std::endl; //初期化されていない
}
for(auto i : array_b2){
std::cout << i << std:: endl;
}
// array3
int array_a3[4] = {10, 20, 30, 40}, array_b3[5] = {1, 2, 3, 4, 5};
// std::swap(array_a3, array_b3); //NG 要素数の異なるarrayをswapできない
// vector
std::vector<std::string> v1;
std::vector<std::string> v2;
v1.emplace_back("abc");
v2.emplace_back("efg");
v2.emplace_back("hij");
// vectorは要素数がことなってもまるごと入れ替わる
v1.swap(v2);
for(auto i : v1){
std::cout << i << std::endl;
}
for(auto i : v2){
std::cout << i << std::endl;
}
// vector2
std::vector<std::string> v11;
std::vector<int> v22;
v11.emplace_back("abc");
v22.emplace_back(1);
v22.emplace_back(2);
// vectorは要素数がことなってもまるごと入れ替わる
// v11.swap(v22); //NG vectorは型が異なるとswapできない
}
view raw swap.cpp hosted with ❤ by GitHub

0 件のコメント:

コメントを投稿