2011-11-01 76 views
21

如果我在另一个类中有一个类中的对象向量,我会尝试并通过引用传递所有信息。通过引用传递向量

尽管我需要通过参考,但究竟是什么?矢量?对象?都?

基本上我问的是:这些有什么区别?我不确定如何引用像容器数组的工作。这些是合法的吗?

+0

你需要改变什么?如果您需要更改一个对象,则通过引用来传递它。如果您需要更改容器(例如添加或删除对象),则传递容器。 – Vlad

+0

并且该参考被正确地写成'vector & blah;' – Vlad

+3

我会推荐[一本很好的C++入门书](http://stackoverflow.com/q/388242/46642)。 –

回答

41

vector&<object>是一个语法错误。 vector<object&>无效,因为矢量的值类型必须是可赋值的。 vector&<object&> blah是一个语法错误。

对矢量的引用是vector<T>&

+0

好吧,所以你只需存储一个向量的引用...当通过索引访问所述向量的元素时,你实际上正在访问原始对象? – SirYakalot

4

你不能有一个引用向量。向量元素必须是可复制和可赋值的,哪些引用不是。所以只有第一个选项实际上是一个选项,但拼写为std::vector<Object> &

请注意,v[1]已返回参考到第二个元素,因此您可以愉快地通过引用传递各个元素。

可能有一个引用包装的向量a la std::ref,但是如果你不知道那是什么,那么在这一点上你可能不应该使用它。

2

另一种选择是传递iterators而不是容器。这是standard library<algorithm>中采用的方法。它们在调用站点稍微更加冗长,但是它们的优点是它们可以用于集合的某些部分以及完整的集合,并将该算法从容器中分离出来。

最后,当然,检查你知道你的algorithms是值得的,因为可能已经有你想要的东西了。