簡體   English   中英

向量作為 c++ 中遞歸 function 的參數

[英]vector as an argument for recursive function in c++

我想要像標題中那樣的 function,但是當我這樣聲明時,

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

它不起作用,因為選項卡仍然是空白的。

您正在按值獲取tab - 每個遞歸調用都將在tab的新副本上運行。

您需要通過引用傳遞tab

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

如果要修改在 function 的 scope 之外聲明的向量,則應通過引用傳遞它

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

否則,對function的每次調用都將創建tab的函數本地副本,並且只會改變該副本,而不是原始外部向量。

您需要將第一個參數聲明為具有引用類型std::vector<int> & like

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

或者你應該重新定義 function 這樣它就會返回一個向量。

這是一個演示程序。

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

程序 output 是

1 2 3 4 5 6 7 8 9 10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM