如何在c++中通过引用传递矢量元素

How to pass vector elements by reference in c++?

本文关键字:元素 引用 c++      更新时间:2023-10-16

我有一个向量,我需要将其元素传递给以下类型的函数:

bool doIt(MyClass &a);

所以我需要稍后做:

vector<MyClass> v;
doIt(v[2]);

我不确定我做得对不对。。。

我不确定我做得对不对。。。

,你做得对,除了在你的示例代码中向量v不包含任何元素,所以索引2越界了,这个表达式:

v[2]

导致未定义的行为。这将足以修复它(如果MyClass是默认可构建的):

vector<MyClass> v(3);
//                ^
//                Creates a vector of 3 default-constructed 
//                elements of type MyClass
doIt(v[2]);

让我们检查一下文档!

http://www.cplusplus.com/reference/vector/vector/operator[]/

reference operator[] (size_type n);
const_reference operator[] (size_type n) const;

返回对向量容器中位置n处元素的引用。

看起来你很好。

doIt(v[2]);

如果2是有效索引(这意味着它小于v.size()),那么这是绝对正确的。它通过引用传递参数。

是的,这是正确的(当然假设v[2]存在),因为std::vectoroperator []返回一个引用。

这是正确的,运算符[]通过引用返回,doIt函数通过引用获取,所以请记住,您可以修改向量中的元素。

您的代码没有任何问题(如果v.size()为>=3),但当您调整向量大小时,您的引用可能会无效。