利用STL函数swap进行vector内的数据交换

#include <iostream> #include <string> #include <algorithm> #include <vector> using namespace std; int main(int argc, char* argv[]) { vector <string> vTest; vTest.push_back( "a "); vTest.push_back( "b "); vTest.push_back( "c "); vTest.push_back( "d "); swap(vTest[0], vTest[3]); vector <string> ::iterator pos; for (pos = vTest.begin(); pos != vTest.end(); pos++) { cout << *pos << endl; } return 0; }


### 如何在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]^。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值