c++ swap交换vector
时间: 2025-05-12 09:32:50 浏览: 22
### 如何在C++中使用 `swap` 函数来交换两个 `vector` 的内容
在 C++ 中,可以通过标准库中的 `std::swap` 函数或者 `std::vector` 容器自身的成员函数 `swap()` 来实现两个向量之间的内容交换。以下是详细的说明以及示例代码。
#### 使用 `std::swap` 进行交换
`std::swap` 是一个通用的标准库函数,定义于 `<utility>` 头文件中。它能够接受任意类型的参数并完成它们的值互换操作[^3]。对于 `std::vector` 类型的对象来说,调用此版本会触发底层拷贝机制以重新分配内存资源给新的对象状态。
```cpp
#include <iostream>
#include <vector>
#include <utility> // for std::swap
int main(){
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = {4, 5};
std::cout << "Before swapping:\n";
std::cout << "vec1 contains :";
for(auto& elem : vec1){ std::cout << ' ' << elem; } std::cout << '\n';
std::cout << "vec2 contains :";
for(auto& elem : vec2){ std::cout << ' ' << elem; } std::cout << '\n';
// Using std::swap to exchange the contents of two vectors.
std::swap(vec1, vec2);
std::cout << "\nAfter swapping:\n";
std::cout << "vec1 contains :";
for(auto& elem : vec1){ std::cout << ' ' << elem; } std::cout << '\n';
std::cout << "vec2 contains :";
for(auto& elem : vec2){ std::cout << ' ' << elem; } std::cout << '\n';
return 0;
}
```
#### 使用 `std::vector::swap` 成员方法进行交换
除了全局命名空间下的 `std::swap` 方法外,`std::vector` 自身也提供了专门针对其内部数据结构优化过的 `swap` 成员方法。该方式通常比普通的 `std::swap` 更高效,因为它只涉及指针级别的调整而非实际的数据复制过程[^1]^。
```cpp
#include <iostream>
#include <vector>
int main(){
std::vector<int> vecA = {7,8,9};
std::vector<int> vecB = {10,11,12,13};
std::cout << "Prior to member swap call:\n";
std::cout << "Vector A has elements: ";
for(int val : vecA) std::cout << val << ", "; std::cout << "\b\b.\n";
std::cout << "Vector B holds values: ";
for(int val : vecB) std::cout << val << ", "; std::cout << "\b\b.\n\n";
// Utilizing vector's built-in swap method instead of global one.
vecA.swap(vecB);
std::cout << "Post member swap invocation:\n";
std::cout << "Now Vector A consists of items: ";
for(int val : vecA) std::cout << val << ", "; std::cout << "\b\b.\n";
std::cout << "And now Vector B comprises entries: ";
for(int val : vecB) std::cout << val << ", "; std::cout << "\b\b."<<'\n';
return 0;
}
```
以上两种方法都可以有效地达到交换两组动态数组的目的,但在性能上推荐优先考虑容器自带的 `swap` 功能,因为它是特别设计用来处理同类别的 STL 容器实例间的快速转换需求的[^4]^。
阅读全文
相关推荐


















