如果我在一个类中有一个对象向量,我想在另一个类中进行更改,我会尝试通过引用传递所有信息。
我究竟需要通过引用传递什么?向量?对象?既?
基本上我要问的是:这些之间有什么区别?
vector&<object> blah; // A reference to a vector of objects?
vector<object&> blah; // A vector of references to objects?
vector&<object&> blah; // A reference to a vector of references to objects???
我真的不确定像容器这样的数组的引用是如何工作的。这些合法吗?
答案 0 :(得分:47)
vector&<object>
是语法错误。 vector<object&>
无效,因为向量的值类型必须是可分配的。 vector&<object&> blah
是语法错误。
对向量的引用是vector<T>&
。
答案 1 :(得分:4)
你不能有引用的向量。向量元素必须是可复制和可分配的,而引用则不是。因此,只有第一个选项实际上是一个选项,但拼写为std::vector<Object> &
。
请注意v[1]
已经将引用返回给第二个元素,因此您可以通过引用愉快地传递单个元素。
可以有一个引用包装器的向量la std::ref
,但如果你不知道那是什么,你可能不应该在这一点上使用它。子>
答案 2 :(得分:2)
另一种选择是传递迭代器而不是容器。这是标准库在<algorithm>
中采用的方法。它们在调用站点上稍微冗长一点,但它们的优点是它们可以用于集合的各个部分以及完整的集合,并将算法与容器分离。
最后,当然,在检查您了解您的算法时是值得的,因为可能已经有一个可以满足您的需求。