我正在尝试编写一个C ++ 11库作为更广泛项目的一部分,该项目实现了在原始缓冲区之上实现的一堆更改(修改,插入和删除)。然后,目标是能够快速查看“通过”更改并获取修改后的数据。
我目前的做法是:
这似乎是一项相当困难的任务 - 有很多事情要处理,我正在快速堆积复杂的代码!
我确信这一定是其他软件中已经处理过的问题,但是查看各种十六进制编辑器等等并没有指出我有用的实现。是否有这个问题的名称(“数据撤销堆栈”,朋友们没有让我走得太远!),或者可以使用的库,甚至可以作为参考,用于此类事情?
答案 0 :(得分:1)
我认为最常见的方法(我过去成功使用的方法)是简单地存储原始状态,然后将每个更改操作(正在执行的操作+参数)放在撤消堆栈上。然后,为了达到特定的先前状态,您将从原始状态开始并应用除了您想要撤消的所有更改。
这比尝试识别数据的哪些部分发生变化要容易得多,除非操作本身非常耗时(因此“重放”到原始状态的速度很慢),因此效果很好。
答案 1 :(得分:1)
我会根据这些术语来查看持久性数据结构,例如https://en.wikipedia.org/wiki/Persistent_data_structure和http://www.toves.org/books/persist/#s2 - 或websearch。我认为你可以用一个持久的树来做这件事,树的叶子带有短的字符串。