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
相关产品推荐
相关产品推荐

