繁体   English   中英

递归 function 适用于 arrays 但不适用于向量 c++

[英]recursive function working for arrays but not vectors c++

为什么此代码适用于 arrays 但不适用于向量? 当我将数据类型替换为数组时,它起作用了。 我认为两者都是可变的。 作为参考,程序应该返回 1 4 10 14 22,或每个索引到目前为止的累计值。

#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;
}

当您使用数组而不是向量实现 function 时,该代码有效。 我不知道为什么,也不知道如何让它也适用于 arrays。

C++ 中的向量按值传递到 function 中,这与 arrays 不同。

这意味着当向量被传递给 function 时,C++ 会创建它的一个副本然后传递。 因此,递归运行时,原始向量并没有改变

void accum(vector<int>& v, int len)

并将 function 称为

vector<int> v;
accum(v, v.size())

你用过它 - >按价值调用
解决 -> 通过引用调用

void accum(vector<int> v, int len) // call by value

void accum(vector<int> &v, int len) // call by reference

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM