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

C++递归实现vector反转时输出原数组未变化的原因求解

问题原因分析

根本原因

你代码的问题出在revArr函数的参数传递方式上:

  • C++中默认的值传递会为传入的实参创建独立副本,函数内部所有对形参arr的修改,都只会作用在这个临时副本上,不会影响main函数中定义的原始vector对象。递归过程中所有交换操作都没有作用到你最终输出的原数组上,所以输出结果和初始值完全一致。

修复方案

只需要把revArr的第二个参数修改为引用传递即可,给参数类型加&符号,让函数直接操作原vector的内存地址,不需要创建副本:

// 修改参数为引用传递,加&
void revArr(int i, vector<int>& arr) {
    int n = arr.size();
    if (i >= n / 2) return;
    swap(arr[i], arr[n-i-1]);
    revArr(i + 1, arr);
}

修改后重新运行就能得到反转后的输出:73 65 87 26 5 13 2。

补充说明

如果不使用引用传递,也可以选择让函数返回修改后的vector,在main中接收返回值,但这种方式会多次创建vector副本,递归场景下额外开销很高,远不如引用传递高效。

内容的提问来源于stack exchange,提问作者rockerdudesandy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:48:03