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)允许您在函数dest内部处理Hanoi它的类型stack<int>,只是没有复制并且调用者可以看到更改:)

于 2013-03-22T15:55:08.243 回答