gpt4 book ai didi

algorithm - 您使用过 "Stack"对象 (.Net) 的哪些实际用途

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:27:02 24 4
gpt4 key购买 nike

我们都读过或听说过堆栈类,但我们中的许多人可能从未找到使用后进先出对象的理由。我很好奇听到使用此对象的现实世界解决方案以及原因。

http://msdn.microsoft.com/en-us/library/system.collections.stack.aspx

我最近看到一个例子,其中一位程序员在遍历分层数据源时使用堆栈来跟踪他的当前位置。当他向下移动层次结构时,他将他的位置标识符插入堆栈,当他向上移动时,他从堆栈中弹出项目。我认为这是一种非常有效的方式来跟踪他在庞大的等级制度中的当前位置。我以前从未见过这个。

还有谁有例子吗?

最佳答案

我用它们来跟踪撤消和重做操作。

我使用这样的界面:

interface ICommand
{
void Execute();
void Undo();
string Description { get; }
}

Undo 和 Redo 都是 Stack<ICommand> 类型.然后我为给定的 Action 创建一个具体的类。在类的构造函数中,我传递了我需要保留的任何信息。 Execute最初做这个 Action ,然后重做; Undo显然,撤消它。它是这样工作的:

  • 撤消操作:弹出撤消堆栈并添加到重做堆栈。
  • 重做未完成的操作:弹出重做堆栈并再次添加到撤消堆栈。
  • 执行新操作:添加到撤消堆栈并清除重做堆栈(因为状态不再一致)。

我发现你必须小心你真的在撤销已经完成的事情。例如,假设您有一个包含两个列表框的 UI,每个列表框都有五个项目。您的操作可能是单击一个按钮将左侧列表中的所有内容移动到右侧列表(因此现在有十个,左侧列表为零)。

撤消操作不是将所有内容移回;撤消操作是仅将您实际移动的五个后退,并留下其他。

关于algorithm - 您使用过 "Stack"对象 (.Net) 的哪些实际用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2058146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com