1

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

bool doIt(MyClass &a);

所以我需要稍后做:

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

我不确定我是否做得对...

4

6 回答 6

5

我不确定我是否做得对...

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

v[2]

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

vector<MyClass> v(3);
//                ^
//                Creates a vector of 3 default-constructed 
//                elements of type MyClass
doIt(v[2]);
于 2013-06-26T17:50:46.683 回答
2

让我们检查文档!

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

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

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

看起来你很好。

于 2013-06-26T17:54:27.023 回答
1

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

于 2013-06-26T17:53:03.037 回答
1
doIt(v[2]);

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

于 2013-06-26T17:50:39.613 回答
0

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

于 2013-06-26T17:51:19.200 回答
0

您的代码没有任何问题(如果 v.size() >= 3),但是当您调整矢量大小时,您的参考可能会变得无效。

于 2013-06-26T17:51:30.483 回答