C++如何交换std::vector下标2与3的元素并兼容多数据类型?
C++ 泛型实现vector指定下标元素交换
直接使用标准库自带的泛型std::swap即可实现需求,本身兼容所有可拷贝、可移动的数据类型,无需手动写交换逻辑。
完整可运行示例
#include <iostream> #include <vector> #include <utility> // std::swap 标准头文件 // 可封装为通用泛型函数,支持任意类型的vector template<typename T> void swap_vec_elem(std::vector<T>& vec, size_t idx_a, size_t idx_b) { // 可选下标合法性校验,避免越界访问 if (idx_a >= vec.size() || idx_b >= vec.size()) { return; } std::swap(vec[idx_a], vec[idx_b]); } int main() { std::vector<int> arr1 = {33,12,11,13,54,65,23,67,22,10}; // 输出交换前内容 std::cout << "交换前:"; for (auto val : arr1) { std::cout << val << " "; } std::cout << "\n"; // 交换下标2和3的元素,直接调用std::swap也可以,不需要额外封装 // std::swap(arr1[2], arr1[3]); swap_vec_elem(arr1, 2, 3); // 输出交换后内容 std::cout << "交换后:"; for (auto val : arr1) { std::cout << val << " "; } std::cout << "\n"; // 其他类型兼容示例:string类型vector std::vector<std::string> str_arr = {"apple", "banana", "cherry", "date"}; swap_vec_elem(str_arr, 0, 3); // 交换后str_arr内容为 {"date", "banana", "cherry", "apple"} return 0; }
运行输出
交换前:33 12 11 13 54 65 23 67 22 10 交换后:33 12 13 11 54 65 23 67 22 10
说明
std::swap是C++标准库的原生泛型实现,性能最优,不会出现自定义交换逻辑可能引发的异常安全问题,支持所有标准库类型和自定义的可移动类型。- 封装的
swap_vec_elem函数额外增加了下标越界判断,你可以根据业务需要调整错误处理逻辑,比如抛出异常、返回错误码等。
内容的提问来源于stack exchange,提问作者essiendreamer28
相关产品推荐
相关产品推荐

