本文共 1331 字,大约阅读时间需要 4 分钟。
C++11 中的std::swap
header // moved fromto in C++11non-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中定义在,而不再是头文件中。上述两个函数等效为:
templatevoid 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::vectorint 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
转载地址:http://xkqx.baihongyu.com/