向量作为 C++ 中递归函数的参数
vector as an argument for recursive function in c++
我想拥有标题中的功能,但是当我这样声明时,
void function(vector<int> tab, int n)
{
if(n > 0)
{
tab.push_back(n);
function(tab, n - 1);
}
}
它不起作用,因为 tab 仍然是空白的。
您正在按值获取 tab
- 每次递归调用都会对 tab
的新副本进行操作。
您需要通过引用传递 tab
:
void function(std::vector<int>& tab, int n) { ... }
如果您想修改在函数范围之外声明的向量,您应该通过引用传递它
void function(vector<int>& tab, int n)
否则,每次调用 function
都会创建 tab
的函数本地副本,并且只会改变该副本,而不是原始外部向量。
要么您需要将第一个参数声明为具有引用类型std::vector<int> &
,如
void function( std::vector<int> &tab, int n);
或者您应该重新定义函数,使其 return 成为向量。
这是一个演示程序。
#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
我想拥有标题中的功能,但是当我这样声明时,
void function(vector<int> tab, int n)
{
if(n > 0)
{
tab.push_back(n);
function(tab, n - 1);
}
}
它不起作用,因为 tab 仍然是空白的。
您正在按值获取 tab
- 每次递归调用都会对 tab
的新副本进行操作。
您需要通过引用传递 tab
:
void function(std::vector<int>& tab, int n) { ... }
如果您想修改在函数范围之外声明的向量,您应该通过引用传递它
void function(vector<int>& tab, int n)
否则,每次调用 function
都会创建 tab
的函数本地副本,并且只会改变该副本,而不是原始外部向量。
要么您需要将第一个参数声明为具有引用类型std::vector<int> &
,如
void function( std::vector<int> &tab, int n);
或者您应该重新定义函数,使其 return 成为向量。
这是一个演示程序。
#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