c++ - 将对 vector 的引用作为参数传递

标签 c++ vector parameter-passing pass-by-reference

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

 void bla(std::vector<int> &arr)
    {
    }

然后它应该传递一个对 vector 的引用,但它会像数组一样发生吗? vector 是使用数组实现的,所以我的假设是当我传递一个引用时,它只是传递第一个元素的地址。对不对?

此外,如果我只是作为 vector 传递,会发生什么情况?它会在堆栈上创建一个拷贝吗? 谢谢

最佳答案

std::vector 与原始 C 风格数组非常不同,因此如果您通过引用传递 std::vector没有人能说 std::vector 中第一项的地址就是传递给函数的地址。

std::vector 中有比“原始 C 风格数组”更多的逻辑。

如果您想要 vector 中第一项的地址,您可以使用&v[0]v.data() 获取它。

如果按值传递 vector ,您将获得原始 vector 的拷贝。并且您在函数中对该拷贝所做的所有修改都不会反射(reflect)到原始文件中。

关于c++ - 将对 vector 的引用作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40048557/

相关文章:

c++ - 通过id实现hash_map & vector的遍历和访问

c++ - 链表插入、删除、排序

C++ priority_queue 底层 vector 容器容量调整大小

c++ - 缓存多个 key 哈希

c++ - opencv立体标定结果

r - Plotly:如何使用 add_annotations 设置箭头的样式和颜色?

c++ - 'for(auto &str : vec)' 内部 for 循环的目的是什么?

javascript - 为什么空参数没有被识别为未定义?

javascript - 如何在没有 onclick 属性帮助的情况下在 jQuery 函数中传递值?

c - 无法通过函数将值放入字符串数组或字符串指针中