📅  最后修改于: 2023-12-03 15:35:09.321000             🧑  作者: Mango
std::swap
和std::vector::swap
是C++ STL库中两个相似但有不同作用的函数。
std::swap
是一个重载函数,定义在头文件<utility>
中。它可以交换两个变量的值,不论这些变量是内置数据类型还是用户定义类型。通过使用std::swap
,我们可以保证在进行变量交换操作时不再需要考虑实现细节。
template<class T> void swap(T& a, T& b);
它可以在不同类型的变量间交换值,例如:
int a = 2, b = 3;
std::swap(a, b); // a=3, b=2;
double c = 4.0, d = 5.0;
std::swap(c, d); // c=5.0, d=4.0;
char e = 'a', f = 'b';
std::swap(e, f); // e='b', f='a';
std::vector::swap
是一个成员函数,定义在头文件<vector>
中。它可以使两个vector对象交换元素,其实现的原理是交换它们所占用的内存。但与std::swap
不同,std::vector::swap
只适用于vector容器。
void swap(vector& other);
例如:
std::vector<int> v1{1,2,3};
std::vector<int> v2{4,5,6};
v1.swap(v2); // v1 = {4,5,6}, v2 = {1,2,3};
std::swap
适用于所有类型的变量,而std::vector::swap
只适用于vector容器对象。std::vector::swap
虽然可以交换两个vector对象,但是无法交换其他类型的变量。
由于std::vector::swap
实现的原理是交换内存占用,所以使用std::vector::swap
可以避免拷贝元素的开销,比其他方法更加高效。
需要注意的是,与std::swap
一样,std::vector::swap
也会导致两个变量的值相互交换。因此,在使用时,一定要注意每个容器已经存在的元素和容器的长度。