2013-03-22 162 views
0

我在閱讀以下問題Towers of Hanoi question。第一個答案說使用參考傳遞

stack<int>& 

我的問題是爲什麼這個?記憶中發生了什麼?

+2

可見你是問一提的是什麼?這應該由你的C++書來解釋。 – 2013-03-22 15:53:22

+0

如果你沒有通過引用傳遞,那麼它會創建一個容器的副本,如果你想修改實際的變量,那麼它就不是你想要的。 – 2013-03-22 15:54:11

+0

引用在技術上只是一個指針。閱讀RAII和指針。 – Paranaix 2013-03-22 15:54:12

回答

1

我們正在傳遞參考,以便不會製作stack對象的副本。如果進行了複製,則對其進行修改不會影響傳遞給該函數的原始對象stack。它只會影響功能本地的副本

引用就像對象的別名;當宣佈爲

stack<int>& source 

source現在引用該對象。

1

在所提到的問題中所使用的函數具有下列原型:

void Hanoi(int nDisks, stack<int> source, stack<int> intermed, stack<int> dest) 

即它需要全部通過stack<int>對象由值。創建了傳遞stack的副本,並且在此函數體內對此對象所做的任何更改都會更改副本,而不是傳遞給它的原始對象。

這就是爲什麼解決方案是通過引用傳遞這些stack對象而不是按值傳遞。基本上引用(如stack<int>& dest)允許你把destHanoi函數內部就像它的類型是stack<int>,這裏還有沒有複製和變化給調用者:)