You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:24:00