std::swap C++11示例

C++11 中的std::swap

header	
// moved from  to  in C++11
non-array (1)	
template  void swap (T& a, T& b)
  noexcept (is_nothrow_move_constructible::value && is_nothrow_move_assignable::value);
array (2)	
template  void swap(T (&a)[N], T (&b)[N])
  noexcept (noexcept(swap(*a,*b)));

注意:

Type T shall be move-constructible and move-assignable (or have swap defined for it, for version (2)).

std::swap 在C++11中定义在,而不再是头文件中。上述两个函数等效为:

template  void swap (T& a, T& b)
{
  T c(std::move(a)); a=std::move(b); b=std::move(c);
}
template  void swap (T (&a)[N], T (&b)[N])
{
  for (size_t i = 0; i

示例:

// swap algorithm example (C++98)
#include      // std::cout
#include     // std::swap
#include        // std::vector

int main () {

  int x=10, y=20;                              // x:10 y:20
  std::swap(x,y);                              // x:20 y:10

  std::vector foo (4,x), bar (6,y);       // foo:4个20 bar:6个10
  std::swap(foo,bar);                          // foo:6个10 bar:4个20

  std::cout << "foo contains:";
  for (std::vector::iterator it=foo.begin(); it!=foo.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}
foo contains: 10 10 10 10 10 10

你可能感兴趣的:(std::swap C++11示例)