2011-11-01 75 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是值得的,因爲可能已經有你想要的東西了。