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 ]
*/

 

 

 

 

 

Posted by Scripter
,