能否用一行代码交换C++ std::vector的切片?
用一行代码交换C++向量的指定切片
当然可以,用标准库的std::swap_ranges算法就能实现一行代码交换两个向量的指定切片,完全满足你的需求。
先看初始向量的正确初始化方式(C++11及以上版本支持):
#include <vector> #include <algorithm> // 必须包含此头文件以使用swap_ranges #include <iostream> int main() { std::vector<int> a = {1, 2, 3, 4, 5}; std::vector<int> b = {6, 7, 8, 9, 10}; // 核心一行代码:交换指定切片 std::swap_ranges(a.begin() + 1, a.begin() + 3, b.begin() + 3); // 验证结果 std::cout << "a: "; for (int num : a) std::cout << num << " "; // 输出:1 9 10 4 5 std::cout << "\nb: "; for (int num : b) std::cout << num << " "; // 输出:6 7 8 2 3 return 0; }
关键说明:
std::swap_ranges的作用是交换两个长度相同的元素范围,属于C++标准算法库。- 参数解析:
a.begin() + 1到a.begin() + 3:指定a中要交换的元素范围(左闭右开),对应a里的元素2,3。b.begin() + 3:指定b中交换范围的起始位置,算法会自动取和第一个范围长度一致的元素,也就是b里的9,10。
执行这行代码后,a会变为{1,9,10,4,5},b变为{6,7,8,2,3},完全符合你的要求。
内容的提问来源于stack exchange,提问作者bob.sacamento
相关产品推荐
相关产品推荐

