[英]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.