📜  std :: swap和std :: vector :: swap之间的区别(1)

📅  最后修改于: 2023-12-03 15:35:09.321000             🧑  作者: Mango

std::swap和std::vector::swap之间的区别

std::swapstd::vector::swap是C++ STL库中两个相似但有不同作用的函数。

std::swap

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

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也会导致两个变量的值相互交换。因此,在使用时,一定要注意每个容器已经存在的元素和容器的长度。