我有一个向量,我需要将它的元素传递给以下类型的函数:
bool doIt(MyClass &a);
所以我需要稍后做:
vector<MyClass> v;
doIt(v[2]);
我不确定我是否做得对...
我有一个向量,我需要将它的元素传递给以下类型的函数:
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 处元素的引用。
看起来你很好。
是的,这是正确v[2]
的(当然假设存在),因为std::vector
'operator []
返回一个引用。
doIt(v[2]);
2
如果是一个有效的索引(这意味着它小于),那是绝对正确的v.size()
。它通过引用传递参数。
那是正确的 operator[] 通过引用返回,而 doIt 函数通过引用获取,所以请记住您可以修改向量中的元素。
您的代码没有任何问题(如果 v.size() >= 3),但是当您调整矢量大小时,您的参考可能会变得无效。