swap交换函数: Exchange values of two objects.
c++11中说明如下:
This function is no longer defined in header
<algorithm>
, but in<utility>
.
The behavior of these function templates is equivalent to:template <class T> void swap (T& a, T& b) { T c(std::move(a)); a=std::move(b); b=std::move(c); } template <class T, size_t N> void swap (T (&a)[N], T (&b)[N]) { for (size_t i = 0; i<N; ++i) swap (a[i],b[i]); }
Many components of the standard library (within std) call swap in an unqualified manner to allow custom overloads for non-fundamental types to be called instead of this generic version: Custom overloads of swap declared in the same namespace as the type for which they are provided get selected through argument-dependent lookup over this generic version.
许多std库会特化实现.
可在特定场景下取代copy, 效率如下:
vector<int> vTest(100000, 9);
auto tNow = TimeUtil::_GetTickCount64();
for (int i = 100000; i > 0; i--){
vector<int> vDest;
vDest = vTest;
}
tNow = TimeUtil::_GetTickCount64() - tNow;
LOG_INF("copy tc %d", tNow);
tNow = TimeUtil::_GetTickCount64();
for (int i = 100000; i > 0; i--){
vector<int> vDest;
vDest.swap(vTest);
}
tNow = TimeUtil::_GetTickCount64() - tNow;
LOG_INF("swap tc %d", tNow);
输出:
2020-03-13 09:31:27.816 [13144][INF] copy tc 14281
2020-03-13 09:31:28.016 [13144][INF] swap tc 203
说明:个人学习,不定时更新