我们都读过或听说过堆栈类,但我们中的许多人可能从未找到使用 LIFO 对象的理由。我很想知道使用该对象的现实世界解决方案以及原因。
http://msdn.microsoft.com/en-us/library/system.collections.stack.aspx http://msdn.microsoft.com/en-us/library/system.collections.stack.aspx
我最近看到一个示例,其中程序员在遍历分层数据源时使用堆栈来跟踪他当前的位置。当他向下移动层次结构时,他将位置标识符推入堆栈,当他向上移动时,他从堆栈中弹出项目。我认为这是一种非常有效的方法来跟踪他在庞大的等级制度中当前的位置。我以前从未见过这个。
还有人有例子吗?
我用它们来跟踪撤消和重做操作。
我使用这样的界面:
interface ICommand
{
void Execute();
void Undo();
string Description { get; }
}
撤消和重做都是类型Stack<ICommand>
。然后我为给定的操作创建一个具体的类。在类的构造函数中,我传递了我需要保留的任何信息。Execute
最初执行该动作,然后重做;Undo
显然,撤消它。它的工作原理如下:
- 撤消操作:弹出撤消堆栈并添加到重做堆栈。
- 重做撤消的操作:弹出重做堆栈并再次添加到撤消堆栈。
- 执行新操作:添加到撤消堆栈并清除重做堆栈(因为状态不再一致)。
我发现你必须小心,你真的在撤销已经做过的事情。例如,假设您有一个带有两个列表框的 UI,每个列表框都有五个项目。您的操作可能是单击一个按钮将左侧列表中的所有内容移动到右侧列表(因此现在有 10 个,左侧列表中有 0 个)。
撤消操作是not把一切都移回去;撤消操作是仅向后移动您实际移动的五个,而保留其他。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)