为了减少内存使用,我们应该将向量声明为全局常数还是将其传递给递归函数?

时间:2019-06-23 09:22:44

标签: c++ recursion vector

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

1 个答案:

答案 0 :(得分:1)

您的内存中有一个部分称为堆栈。您的函数调用存储在此处。您浪费内存,因为您传递了一个vector作为值,因为每个调用都会有自己的副本。相反,您需要将其作为参考传递,因为在这种情况下,vector将被重用。

您可以重构代码以使用class作为其成员来使用vector

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

编辑

如果永远不要修改向量,则可以全局使用它,但在这种情况下,它应该是恒定的。