我需要在递归函数中使用向量数组。我应该将该向量声明为全局常量还是直接从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;
}
答案 0 :(得分:1)
您的内存中有一个部分称为堆栈。您的函数调用存储在此处。您浪费内存,因为您传递了一个vector
作为值,因为每个调用都会有自己的副本。相反,您需要将其作为参考传递,因为在这种情况下,vector
将被重用。
您可以重构代码以使用class
作为其成员来使用vector
。
使用全局变量可以节省大量内存,但是这是一种反模式,因此会导致严重的问题,您需要尽可能避免使用它。
编辑
如果永远不要修改向量,则可以全局使用它,但在这种情况下,它应该是恒定的。