将对向量的引用作为参数传递
Passing a reference to a vector as a parameter
我知道当你传递一个数组作为参数时,你基本上传递了索引0处的数组地址。然后,硬件知道int通常是4个字节,所以它可以很容易地访问其他元素。
我的问题是关于向量的。
如果我有一个函数
void bla(std::vector<int> &arr)
{
}
那么它应该传递一个对向量的引用,但是它会像数组一样发生吗?
向量是使用数组实现的,所以我的假设是当我传递一个引用时,它只是传递第一个元素的地址。对不对?
此外,如果我只是作为向量传递,会发生什么情况?它会在堆栈上创建一个副本吗?
谢谢
如果通过引用传递向量,则传递整个数组并且可以对其进行编辑。它不传递第一个元素的地址。否则,如果你不通过引用传递,它只会复制数组。
来源:学校编码经验(如果不准确,请编辑)。
std::vector
与原始 C 样式数组 非常不同,因此如果您通过引用传递 std::vector
没有人可以说地址std::vector
中的第一项是传递给函数的内容。
std::vector
里面的逻辑不仅仅是 "raw C-style array"。
如果你想要向量中第一项的地址,你可以使用 &v[0]
或 v.data()
.
来获取它
如果按值传递向量,您将获得原始向量的副本。您在函数中对该副本所做的所有修改都不会反映到原始文件中。
总的来说:
void foo(Bar b)
- 按值传递,b
是副本或原始Bar
。
void foo(Bar& b)
- 引用传递,可以通过b
. 修改原来的Bar
void foo(Bar* b)
——指针传递,可以通过b
修改原来的Bar
(只要b
不为空)。
void foo(const Bar& b)
- 通过 const 引用传递,b
是原始的 Bar
但您不能在 foo
. 范围内修改它
void foo(const Bar* b)
- 通过指向常量的指针传递,b
是指向原始 Bar
的指针,但您不能在 foo
的范围内修改它。
void foo(Bar* const b)
——通过const指针传递,b
是指向原Bar
的指针,可以修改原Bar
(只要b
不为空),但您无法更改 b
指向的内容。
void foo(const Bar* const b)
- 通过 const 指针传递给 const,您不能更改原始 Bar
也不能更改 b
指向 [=23= 范围内的内容].
我知道当你传递一个数组作为参数时,你基本上传递了索引0处的数组地址。然后,硬件知道int通常是4个字节,所以它可以很容易地访问其他元素。 我的问题是关于向量的。 如果我有一个函数
void bla(std::vector<int> &arr)
{
}
那么它应该传递一个对向量的引用,但是它会像数组一样发生吗? 向量是使用数组实现的,所以我的假设是当我传递一个引用时,它只是传递第一个元素的地址。对不对?
此外,如果我只是作为向量传递,会发生什么情况?它会在堆栈上创建一个副本吗? 谢谢
如果通过引用传递向量,则传递整个数组并且可以对其进行编辑。它不传递第一个元素的地址。否则,如果你不通过引用传递,它只会复制数组。
来源:学校编码经验(如果不准确,请编辑)。
std::vector
与原始 C 样式数组 非常不同,因此如果您通过引用传递 std::vector
没有人可以说地址std::vector
中的第一项是传递给函数的内容。
std::vector
里面的逻辑不仅仅是 "raw C-style array"。
如果你想要向量中第一项的地址,你可以使用 &v[0]
或 v.data()
.
如果按值传递向量,您将获得原始向量的副本。您在函数中对该副本所做的所有修改都不会反映到原始文件中。
总的来说:
void foo(Bar b)
- 按值传递,b
是副本或原始Bar
。void foo(Bar& b)
- 引用传递,可以通过b
. 修改原来的void foo(Bar* b)
——指针传递,可以通过b
修改原来的Bar
(只要b
不为空)。void foo(const Bar& b)
- 通过 const 引用传递,b
是原始的Bar
但您不能在foo
. 范围内修改它
void foo(const Bar* b)
- 通过指向常量的指针传递,b
是指向原始Bar
的指针,但您不能在foo
的范围内修改它。void foo(Bar* const b)
——通过const指针传递,b
是指向原Bar
的指针,可以修改原Bar
(只要b
不为空),但您无法更改b
指向的内容。void foo(const Bar* const b)
- 通过 const 指针传递给 const,您不能更改原始Bar
也不能更改b
指向 [=23= 范围内的内容].
Bar