C++递归函数对数组有效但对vector无效的原因及解决方法
问题原因与解决方案
核心原因:参数传递方式差异
- 你的
accum函数中,vector采用值传递:每次调用accum(v, len-1)时,都会创建一个vector的副本,递归过程中修改的都是这个副本的内容,main函数里的原vector完全不会被改动。 - 数组作为参数时,会自动退化为指针,本质是传递原数组的内存地址:递归中修改的是原数组的内存空间,所以能直接改变原数组的值。
修复方案:改用引用传递vector
把函数参数里的vector<int> v改成vector<int>& v(引用传递),这样递归过程中操作的都是原vector的内存,修改会直接作用到原对象上。
修改后的完整代码:
#include <iostream> #include <vector> using namespace std; void accum(vector<int>& v, int len) { if (len == 1){ return; } accum(v, len-1); v[len-1] += v[len-2]; } int main() { vector<int> v = {1, 3, 6, 4, 8}; accum(v, 5); for (int i = 0; i < 5; i++) { cout << v[i] << " "; } return 0; }
运行这段代码会输出预期的1 4 10 14 22。
内容的提问来源于stack exchange,提问作者cpphard
相关产品推荐
相关产品推荐

