📅  最后修改于: 2023-12-03 15:05:22.279000             🧑  作者: Mango
在 C++ 中,std::swap 是一个通用的 swap 函数,可以用来交换任意两个类型为 T 的对象的值。而 std::vector::swap 则是 std::vector 类特有的成员函数,用来交换两个 vector 对象的内容。
std::swap 的函数原型如下:
template<typename T>
void swap(T& a, T& b);
这个函数接受两个参数,分别为类型为 T 的对象 a 和 b 的引用。在函数内部,它通过 std::move 和移动语义来实现交换操作。
因此,std::swap 可以用来交换任何类型为 T 的对象,包括内置类型和自定义类型。比如,我们可以用它来交换两个 int 类型的变量:
int a = 1, b = 2;
std::swap(a, b);
// 现在 a 的值为 2,b 的值为 1
std::vector::swap 的函数原型如下:
void swap(vector& other) noexcept;
该函数接受一个类型为 vector 的对象 other 的引用。在函数内部,它会直接交换当前 vector 对象和 other 对象的内部状态,包括它们的元素、大小和容量等信息。
因此,std::vector::swap 只能用来交换两个 vector 对象,而不能用于交换其他类型的对象。比如,我们可以用它来交换两个 vector
std::vector<int> a{1, 2, 3}, b{4, 5, 6};
a.swap(b);
// 现在 a 中的元素为 4,5,6,b 中的元素为 1,2,3
需要注意的是,std::vector::swap 是一个无异常的操作(noexcept),因此在实现移动语义时可以更加高效。同时,如果我们只是想交换两个 vector 对象的内容而不是整个对象,用 std::vector::swap 可以更快地完成操作。
std::swap 和 std::vector::swap 都可以用来交换两个对象的值。但是,它们的用法和适用范围有所不同。如果我们需要交换任意类型的对象,可以使用 std::swap;如果我们只是需要交换两个 vector 对象的内容,可以使用 std::vector::swap。