将向量数组作为函数参数传递以更改原始值

时间:2014-10-20 13:44:44

标签: c++ arrays vector reference

我有一个向量数组(int),我想将它作为参考传递给成员函数,以便可以修改它。 (它实际上是我的函数的输出,但我已经有一个返回值。)

我写了这样的东西

int Dag::dag2array(vector<int> (&aVectors)[4])
{ 
//some stuff
//calling another function tree2array(aVectors) 
//passing the same array as reference
}

它编译并运行,虽然看起来它没有做我想要的。

在一个或多或少相反的问题(Passing array of vectors as a function parameter (values will not change))中,答案说可以在没有&的情况下修改数组,并且它不会复制,但它就像一个指针。

  1. 为什么像int这样的变量需要&来避免 复制并能够在运行中修改原始变量的值#34;而不是阵列?
  2. 我的情况下是否应该使用&

2 个答案:

答案 0 :(得分:3)

这是C阵列让生活变得艰难的一种情况。我强烈建议您使用std::array(如果您还没有使用C ++ 11,则使用std::tr1::array)。而不是那种模糊的语法,说

int func(std::array<std::vector<int>, 4>& vectors)

非常清楚你通过引用传递了4个向量的数组,因此可以通过说

来修改值。
vectors[1][2] = 19;

或者你有什么。

答案 1 :(得分:0)

将数组传递给函数时,其类型将调整为指向其第一个元素的指针。同样,表单T[N]的参数声明也会调整为T*。传递的指针被复制,但矢量的元素根本不会被复制。这意味着当解除引用指针时,您仍然可以通过数组访问语法array[n]引用原始数组元素(这实际上只是指针算法:*(array + n))。

如果您通过值将实际对象传递给函数,则会出现副本,因此如果您仍想修改元素,则需要引用。

所以不,你不需要通过引用传递数组。除非您想要访问函数中数组的大小(因为数组到指针的衰减会丢弃数组大小)。