std swap()和std vector swap()的区别
std::swap
是用于交换给定值的通用函数,而 std::vector::swap
是可以交换两个不同向量容器的所有内容的专用函数。
以下是 std::swap
和 std::vector::swap
之间的一些主要区别:
std::swap |
std::vector::swap |
---|---|
std::swap() 是 C++ STL 中的内置函数,它交换作为参数传递给它的任何两个变量的值。 |
std::vector::swap() 函数用于将一个向量的全部内容与另一个相同类型的向量交换。 |
如果 std::swap() 函数用于交换两个向量 A 和 B,它将为 std::vector 调用专门的 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