0

私は次の質問を読んでいますハノイの塔の質問。最初の答えは使用を言う

stack<int>&

私の質問はなぜこれなのか?記憶の中で何が起こったのですか?

4

2 に答える 2

1

stackオブジェクトのコピーが作成されないように、参照を渡します。stackコピーが作成された場合、その変更は関数に渡された元のオブジェクトには影響しません。関数にローカルなコピーにのみ影響します。

参照は、オブジェクトのエイリアスのようなものです。として宣言されたとき

stack<int>& source

source現在、そのオブジェクトを参照しています。

于 2013-03-22T15:53:57.177 に答える
1

上記の質問で使用された関数には、次のプロトタイプがありました。

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

つまり、渡されたすべてのstack<int>オブジェクトを値で取得します。渡されたのコピーstackが作成され、この関数の本体内でこのオブジェクトに加えられた変更は、渡された元のオブジェクトではなく、コピーを変更します。

そのため、解決策はこれらのstackオブジェクトを値渡しではなく参照渡しにすることでした。基本的に参照 ( など) を使用すると、関数内でその型と同じようstack<int>& destに扱うことができます。コピーはなく、変更は呼び出し元に表示されます:)destHanoistack<int>

于 2013-03-22T15:55:08.243 に答える