将向量数组作为函数参数传递以更改原始值
Posted
技术标签:
【中文标题】将向量数组作为函数参数传递以更改原始值【英文标题】:Passing array of vectors as a function parameter to change the original values 【发布时间】:2014-10-20 13:44:43 【问题描述】:我有一个向量数组(整数),我想将它作为参考传递给成员函数,以便可以对其进行修改。 (它实际上是我的函数的输出,但我已经有一个返回值。)
我写了这样的东西
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))中,答案说可以在没有&
的情况下修改数组,并且它不会复制,但它就像一个指针。
-
为什么像
int
这样的变量需要&
来避免
复制并能够“即时”修改原始变量的值而不是数组?
我是否应该使用&
?
【问题讨论】:
你的问题不清楚。与您想要的相反,代码实际上做了什么? 向量数组?那只是邪恶的。使用 C++ 或 C,不要同时使用! 试试vector<vector<int>>&
@NeilKirk: 使用 vector这是 C 数组让生活变得困难的情况之一。我强烈推荐使用std::array
(或者std::tr1::array
,如果你还没有使用C++11)。而不是那种晦涩难懂的语法,说
int func(std::array<std::vector<int>, 4>& vectors)
清楚地表明您通过引用传递了一个由 4 个向量组成的数组,因此可以通过说来修改值
vectors[1][2] = 19;
或者你有什么。
【讨论】:
【参考方案2】:当一个数组被传递给一个函数时,它的类型被调整为一个指向它的第一个元素的指针。同样,T[N]
形式的参数声明调整为T*
。传递的指针被复制,但向量的元素根本不被复制。这意味着在取消引用指针时,您仍然可以通过数组访问语法array[n]
(实际上只是指针算法:*(array + n)
)引用原始数组元素。
如果您通过值将实际对象传递给函数,则会发生副本,因此如果您仍想修改元素,则需要引用。
所以不,您不需要通过引用传递数组。除非你想在函数中访问数组的大小(因为数组到指针的衰减会丢弃数组大小)。
【讨论】:
以上是关于将向量数组作为函数参数传递以更改原始值的主要内容,如果未能解决你的问题,请参考以下文章