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
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/264215.html