私は次の質問を読んでいますハノイの塔の質問。最初の答えは使用を言う
stack<int>&
私の質問はなぜこれなのか?記憶の中で何が起こったのですか?
stack
オブジェクトのコピーが作成されないように、参照を渡します。stack
コピーが作成された場合、その変更は関数に渡された元のオブジェクトには影響しません。関数にローカルなコピーにのみ影響します。
参照は、オブジェクトのエイリアスのようなものです。として宣言されたとき
stack<int>& source
source
現在、そのオブジェクトを参照しています。
上記の質問で使用された関数には、次のプロトタイプがありました。
void Hanoi(int nDisks, stack<int> source, stack<int> intermed, stack<int> dest)
つまり、渡されたすべてのstack<int>
オブジェクトを値で取得します。渡されたのコピーstack
が作成され、この関数の本体内でこのオブジェクトに加えられた変更は、渡された元のオブジェクトではなく、コピーを変更します。
そのため、解決策はこれらのstack
オブジェクトを値渡しではなく参照渡しにすることでした。基本的に参照 ( など) を使用すると、関数内でその型と同じようstack<int>& dest
に扱うことができます。コピーはなく、変更は呼び出し元に表示されます:)dest
Hanoi
stack<int>