swap
操作交换两个相同类型容器的内容。调用swap之后,两个容器中的元素将会交换:
vector<striong> svec1(10); //10个元素的vector
vector<string> svec2(24); //24个元素的vector
swap(svec1,svec2);
调用swap后,svec1将包含24个string元素,svec2将包含10个string。除array
外,交换两个容器内容的操作保证会很快——元素本身并未交换,swap只是交换了两个
容器的内部数据结构。
以前效率低下的写法:
template <typename T>
void _Math::swap(T &a, T &b) {
T t = a;
a = b;
b = t;
}
正确写法:
/// <summary>
/// 交换两个T类型的值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="a"></param>
/// <param name="b"></param>
/// 创建时间: ????-??-?? 最后一次修改时间:2024-09-17
template <typename T>
void _Math::swap(T &a, T &b) {
/*
T t = a;
a = b;
b = t;
*/
constexpr size_t nLen = sizeof(T);
_byte tmp[nLen];
_Memory::Copy((_byte*)(&tmp), (_byte*)(&a), nLen);
_Memory::Copy((_byte*)(&a), (_byte*)(&b), nLen);
_Memory::Copy((_byte*)(&b), tmp, nLen);
}
例子:
nt main() {
vector<int> v1 = { 1,2,3 }, v2 = { 3,4,5 };
for (auto i : v1)
{
cout << i << "\n";
}
for (auto i : v2)
{
cout << i << "\n";
}
cout << "------------------------------------------------------------\n";
_Math::swap(v1, v2);
for (auto i : v1)
{
cout << i << "\n";
}
for (auto i : v2)
{
cout << i << "\n";
}
}