c++ - 对链表类撤消功能
问题描述
嘿,我是 C++ 的初学者,我想在 C++Undo
的类中添加一个函数linkedList
,该函数反转列表上完成的最后一个操作,例如 ( append
, insertAt
, deleteAt
, clear
) , 关于什么是最好的方法的任何想法撤消这些命令?
解决方案
我可以想到两种简单的方法来完成“撤消”的魔力:将更改保存在队列中,直到您确实必须推送它们,或者将反向操作推送到您所做的每个更改到撤消队列中。
第一个看起来像这样:
User Action | Action Queue | actual list
---------------------------------------
nothing | empty | {}
push 5 | {push 5} | {}
push 2 | {push 2, push 5} | {}
print list | {} | {5, 2}
只有当用户执行需要渗透更改的操作(如打印或获取)时,您才真正进行更改。然后撤消将只是从动作队列中弹出。
另一种选择是存储反向队列:
User Action | Reverse Queue | actual list
---------------------------------------
nothing | empty | {}
push 5 | {pop} | {5}
push 2 | {pop, pop} | {5, 2}
pop | {push 2, pop, pop} | {5}
undo | {pop, pop} | {5, 2}
在这里,用户所做的任何事情都会立即渗透,并且您将操作的反向推送到反向队列中。然后撤消是弹出反向队列并采取行动。
虽然第一个更容易实现,但这意味着您在“推送更改”后无法撤消。
推荐阅读
- php - PHP file_get_contents 的问题
- javascript - 为什么`
` 当我使用 this.state.reachedBottom 时消失? - reactjs - 如何覆盖样式组件中的 React Slick 类?
- python - 不被识别为内部或外部命令、可运行程序或批处理文件
- javascript - 我如何自动填充 angularjs 输入
- sorting - Unity - 对来自同一预制件的对象进行排序层
- powershell - 我可以在 powershell 读取主机中使用现有变量吗
- javascript - 函数返回待处理的 Promise 而不是布尔值
- django - 将模型实例集与其在 DB 中的对应部分进行比较 | 姜戈
- core-data - NSManagedObject 插入上下文中,但未显示在 tableview