我需要在递归函数中使用向量数组。我应该将该向量全局声明为常量还是直接从 c++ 中的 main 函数传递它?推荐哪种方法?前一种方法消耗的内存是否比后一种方法少?在每个递归调用中是否创建了矢量数组的单独副本?
我不想修改数组。我只想在每个递归调用中访问数组的所有元素。有人能告诉我这两种方法在记忆和时间方面的区别吗?
第一种方法
const vector<int> array = {1,2,3,4,5};
void fun(int index)
{
// some ending condition
// only access array(no modification)
// recusive call
fun(index+1);
}
int main()
{
fun(a,0);
return 0;
}
第二种方法
void fun(vector<int> &array,int index)
{
// some ending condition
// only access array(no modification)
// recusive call
fun(array,index+1);
}
int main()
{
vector<int> a = {1,2,3,4,5};
fun(a,0);
return 0;
}
内存中有一个名为堆栈的部分。您的函数调用存储在那里。如果将vector
作为值传递,则会浪费内存,因为每个调用都有自己的副本。相反,您需要将其作为引用传递,因为在这种情况下,vector
将被重用。
可以重构代码以使用此vector
作为其成员的class
。
使用全局变量会节省大量内存,但它是一种反模式,会导致严重的问题,您需要尽可能避免它。
编辑
如果向量从未被修改,那么全局使用它是可以的,但在这种情况下,它应该是常量的。