将对向量的引用作为参数传递

And*_*ey 1 c++ vector parameter-passing pass-by-reference

我知道当你将数组作为参数传递时,你基本上会在索引0处传递数组的地址.然后,硬件知道int通常是4个字节,因此它可以轻松访问其他元素.我的问题是关于矢量.如果我有一个功能

 void bla(std::vector<int> &arr)
    {
    }
Run Code Online (Sandbox Code Playgroud)

然后它应该传递对向量的引用,但它是否与数组一样?向量是使用数组实现的,所以我的假设是当我传递一个引用时,它只是传递第一个元素的地址.它是否正确?

另外,如果我作为向量传递,会发生什么?它会在堆栈上创建一个副本吗?谢谢

Mr.*_*C64 5

std::vector非常不同的比原始C数组,所以如果你传递一个std::vector引用没有人可以说,在第一项的地址std::vector是什么是传递给函数.

里面std::vector有更多的逻辑,而不仅仅是"原始的C风格阵列".

如果你想要矢量中第一项的地址,你可以使用&v[0]或得到它v.data().

如果按值传递矢量,则会获得原始矢量的副本.您在功能中对该副本所做的所有修改都不会反映到原始版本中.