【问题标题】:vector as an argument for recursive function in c++ [duplicate]向量作为c ++中递归函数的参数[重复]
【发布时间】:2021-12-30 17:33:36
【问题描述】:

我想在标题中拥有类似的功能,但是当我这样声明时,

void function(vector<int> tab, int n)
{
    if(n > 0)
    {
        tab.push_back(n);
        function(tab, n - 1);
    }
}

它不起作用,因为 tab 仍然是空白的。

【问题讨论】:

  • 你是传值,你需要传引用。
  • 应该有一个关于按值传递的常见问题解答问题,以便重复这样的问题。这是我最近两天看到的第三个问题。

标签: c++ recursion vector c++17 function-definition


【解决方案1】:

您按值获取 tab - 每个递归调用都将在 tab 的新副本上运行。

您需要通过引用传递tab

void function(std::vector<int>& tab, int n) { ... }

【讨论】:

    【解决方案2】:

    您需要将第一个参数声明为具有引用类型std::vector&lt;int&gt; &amp; 之类的

    void function( std::vector<int> &tab, int n);
    

    或者你应该重新定义函数,让它返回一个向量。

    这是一个演示程序。

    #include <iostream>
    #include <vector>
    
    std::vector<int> function( int n )
    {
        std::vector<int> v;
    
        return n > 0 ? v = function( n - 1 ), v.push_back( n ), v : v;
    }
    
    int main()
    {
        auto v = function( 10 );
    
        for (auto &item : v)
        {
            std::cout << item << ' ';
        }
        std::cout << '\n';
    }
    

    程序输出是

    1 2 3 4 5 6 7 8 9 10
    

    【讨论】:

      【解决方案3】:

      如果要修改在函数范围之外声明的向量,则应通过引用传递它

      void function(vector<int>& tab, int n)
      

      否则,每次调用 function 都会创建 tab 的函数本地副本,并且只会改变该副本,而不是原始外部向量。

      【讨论】:

        猜你喜欢
        • 2011-04-07
        • 1970-01-01
        • 2021-09-23
        • 1970-01-01
        • 2014-08-08
        • 1970-01-01
        • 2014-11-04
        • 2017-02-12
        相关资源
        最近更新 更多