我们应该全局声明一个向量还是在递归函数中传递它以减少内存使用



我需要在递归函数中使用向量数组。我应该将该向量全局声明为常量还是直接从 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

使用全局变量会节省大量内存,但它是一种反模式,会导致严重的问题,您需要尽可能避免它。

编辑

如果向量从未被修改,那么全局使用它是可以的,但在这种情况下,它应该是常量的。

最新更新