私は次の質問を読んでいますハノイの塔の質問。最初の答えは使用を言う
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に扱うことができます。コピーはなく、変更は呼び出し元に表示されます:)destHanoistack<int>