我有一个向量,我需要将其元素传递给类型的函数:
bool doIt(MyClass &a);
所以我需要稍后再做:
vector<MyClass> v;
doIt(v[2]);
我不确定我做得对吗......
答案 0 :(得分:5)
我不确定我做得对吗......
是,你做对了,除了你的示例代码中的向量v
不包含任何元素,所以索引2已经出来了-of-bounds,以及这个表达式:
v[2]
未定义行为的结果。这足以解决它(如果MyClass
是默认可构造的):
vector<MyClass> v(3);
// ^
// Creates a vector of 3 default-constructed
// elements of type MyClass
doIt(v[2]);
答案 1 :(得分:2)
让我们查看文档!
http://www.cplusplus.com/reference/vector/vector/operator[]/
reference operator[] (size_type n);
const_reference operator[] (size_type n) const;
返回对向量容器中位置n处元素的引用。
看起来你很好。
答案 2 :(得分:1)
doIt(v[2]);
如果2
是有效索引(这意味着它小于v.size()
),则绝对正确。它通过引用传递参数。
答案 3 :(得分:1)
是的,这是正确的(假设当然存在v[2]
),因为std::vector
&#39; s operator []
会返回引用。
答案 4 :(得分:0)
这是正确的操作符[]通过引用返回,而doIt函数通过引用获取,所以请记住你可以修改向量中的元素。
答案 5 :(得分:0)
您的代码没有任何问题(如果v.size()是&gt; = 3),但是当您调整矢量大小时,您的引用可能会变得无效。