C++98 에서는 swap 함수를 쓸려면 #include <algorithm> 을 했지만, C++0x 와 C++11 에서는 #include <utility> 로 바뀌었다.
또 빝트인 타입의 데이터를 swap 할 때는 이전 처럼 std::swap(dat1. data2) 하지만, 빌트인 타입이 아닌 데이터를 swap 할 때는 std:: 를 붙이지 않고 swap(data1, data2) 로 해야 한다.
Visual C++ 의 cl 로 컴파일할려면 Visual Studio 2008 이상이면 되고. g++ 로 컴파일할려면 g++ 4.5.x 이상이면 된다.
만약 Haskell Platform 에 설치된 g++ 4.5.2 로 컴파일할려면 옵션 -enable-auto-import 를 추가하면 성공작으로 컴파일될 것이다.
다음 소스의 컴파일과 실행을 테스트한 환경은
Visual C++ 2008
Visual C++ 2010
Visual C++ 2012
Visual C++ 2013
gcc 4.5.2
gcc 4.5.3
gcc 4.6.2
gcc 4.7.0
gcc 4.8.0
gcc 4.8.1
이다.
// Filename: testSwap.cpp
//
// Test swap functions of C++98 and C++11 specifications.
//
// Compile: cl /EHsc testSwap.cpp
// Compile: g++ -std=c++11 -o testSwap testSwap.cpp
// Compile: g++ -std=c++0x -o testSwap testSwap.cpp
//
// See for detail: http://www.cplusplus.com/reference/algorithm/swap/
#include <iostream> // std::cout
// #include <algorithm> // std::swap since C++98
#include <utility> // std::swap and swap since C++0x
#include <vector> // std::vector
#include <string> // std::string
template <typename T>
void printVector(std::vector<T> v)
{
std::cout << '[';
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it)
std::cout << ' ' << *it;
std::cout << " ]\n";
}
int main () {
int x = 10, y = 20; // x:10 y:20
std::swap(x, y); // x:20 y:10
std::vector<int> foo (4,x), bar (6,y); // foo:4x20 bar:6x10
// std::swap(foo, bar); // foo:6x10 bar:4x20 since C++98
swap(foo, bar); // foo:6x10 bar:4x20 since C++0x
std::cout << "foo contains:";
for (std::vector<int>::iterator it=foo.begin(); it!=foo.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
std::cout << '\n';
std::string s1 = "Hello,";
std::string s2 = "world!";
std::cout << s1 << ' ' << s2 << std::endl;
std::cout << '\n';
std::cout << "Swapping two strings..." << std::endl;
s1.swap(s2);
std::cout << s1 << ' ' << s2 << std::endl;
std::cout << '\n';
std::vector<int> v1(10, 7);
std::vector<int> v2(5, -1);
std::cout << "v1 = [";
for (std::vector<int>::iterator it = v1.begin(); it != v1.end(); ++it)
std::cout << ' ' << *it;
std::cout << " ]\n";
std::cout << "v2 = [";
for (std::vector<int>::iterator it = v2.begin(); it != v2.end(); ++it)
std::cout << ' ' << *it;
std::cout << " ]\n";
std::cout << '\n';
std::cout << "Swapping two vectors..." << std::endl;
v1.swap(v2);
std::cout << "v1 =";
printVector(v1);
std::cout << "v2 = ";
printVector(v2);
return 0;
}
/*
Output:
foo contains: 10 10 10 10 10 10
Hello, world!
Swapping two strings...
world! Hello,
v1 = [ 7 7 7 7 7 7 7 7 7 7 ]
v2 = [ -1 -1 -1 -1 -1 ]
Swapping two vectors...
v1 =[ -1 -1 -1 -1 -1 ]
v2 = [ 7 7 7 7 7 7 7 7 7 7 ]
*/
'프로그래밍 > C++' 카테고리의 다른 글
명령줄 컴파일러로 컴파일하는 간단한 Visual C++ 2010 용 Win32 응용프로그램 예제 (0) | 2013.10.10 |
---|---|
Visual C++ 2010 에서 컴파일되는 여러가지 컨솔 Hello 예제 모음 (0) | 2013.10.09 |
c++0x 의 vector 타입과 for 반복문에 관하여 (0) | 2013.09.27 |
Visual C++ 12와 cygwin64 의 g++로 테스트해 본 C++11 의 vector 타입 초기화 (0) | 2013.09.25 |
vector 타입을 이용한 간단한 행렬 곱셈을 수행하고 행렬식을 구하는 C++ 언어 소스 (0) | 2013.09.20 |