std::swap和std::vector::swap的区别
std::swap是一个通用函数,用于交换给定值,而std::vector::swap是一个特殊函数,可以交换两个不同vector容器的所有内容。
以下是std::swap和std::vector::swap之间的一些主要区别,
std::swap | std::vector::swap |
---|---|
std::swap()是C++ STL中的一个内置函数,可以交换作为参数传递给它的任何两个变量的值。 | std::vector::swap()函数用于将一个向量的全部内容与另一个相同类型的向量交换。 |
如果std::swap()函数用于交换两个向量A和B,它将调用专门的std::swap算法,该算法反过来调用A.swap(B)并交换内容。 | std::vector::swap函数将一个向量的内容与另一个向量交换。它交换两个向量的地址(即容器交换对其数据的引用),而不是一个一个地交换每个元素,这样做的时间是恒定的O(1)。 |
容器适配器的std::swap重载是在C++11中引入的。 先前版本的C++需要线性时间复杂度来交换向量 | std::vector::swap函数将总是在恒定时间内交换向量的内容。 |
在实践中,这两个函数会在O(1)时间内交换向量的内容,并给出相同的性能。为了保持一致性,最好使用std::swap。
程序1:
演示如何使用std::swap()交换两个向量。
// CPP program to illustrate swapping
// of two vectors using std::swap()
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> v1 = { 1, 2, 3 };
vector<int> v2 = { 4, 5, 6 };
// swapping the above two vectors
// by traversing and swapping each element
for (int i = 0; i < 3; i++) {
swap(v1[i], v2[i]);
}
// print vector v1
cout << "Vector v1 = ";
for (int i = 0; i < 3; i++) {
cout << v1[i] << " ";
}
// print vector v2
cout << "\nVector v2 = ";
for (int i = 0; i < 3; i++) {
cout << v2[i] << " ";
}
return 0;
}
输出:
Vector v1 = 4 5 6
Vector v2 = 1 2 3
程序2:
演示如何使用std::vector::swap()交换两个向量。
// CPP program to illustrate swapping
// of two vectors using std::vector::swap()
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> v1 = { 1, 2, 3 };
vector<int> v2 = { 4, 5, 6 };
// swapping the above two vectors
// using std::vector::swap
v1.swap(v2);
// print vector v1
cout << "Vector v1 = ";
for (int i = 0; i < 3; i++) {
cout << v1[i] << " ";
}
// print vector v2
cout << "\nVector v2 = ";
for (int i = 0; i < 3; i++) {
cout << v2[i] << " ";
}
return 0;
}
输出:
Vector v1 = 4 5 6
Vector v2 = 1 2 3