C++ 撤消命令/反转到以前的状态

标签 c++ console command undo

我有一个随机生成的数字网格,大小为 gameSize(用户输入),包含在 vector 的 vector 中。用户可以输入两个坐标 (x, y),以便将网格内的数字更改为预定义值,即“0”。

例如,用户输入 X:0 Y:0 和:

{9, 7, 9}

{9, 6, 8}

{5, 1, 4}

变成:

{0, 7, 9} <-- Changes position 0,0 to 0 (the predefined value)

{9, 6, 8} 

{5, 1, 4}

我想弄清楚如何添加一个“撤消”功能,在该功能中提示用户是否要撤消他们的选择,如果是,则反转选择,以便位置 0,0 变回原始值(在此示例中为值 9)。我该如何实现?我知道我需要以某种方式记录以前的网格状态,但不知道如何做。

最佳答案

如果您只想能够“撤消”上次的更改,那么您可以简单地制作一个拷贝,即进行更改之前状态的备份。然后,如果用户想要“撤消”更改,则从备份复制到实际数据中。

对于更多级别的撤消,您可以拥有一堆拷贝。


如果数据很大,那么不是为每次更改都复制数据,而是存储实际更改的拷贝。然后,当用户想要“撤消”时,您可以执行与更改相反的操作。

示例:如果用户想用 Z 修改坐标 X、Y,则存储 X、Y 和 Z。然后在执行撤消时用 -Z 修改 X、Y。

关于C++ 撤消命令/反转到以前的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43487415/

相关文章:

c++ - 将类类型存储为映射值并根据映射键初始化新类

c++ - 如何创建 x64 版本的 native 控制台项目?

c - 从控制台到 win32 应用程序

php - 如何在php标签后列出所有带有空格的文件

linux - 在终端中的 ubuntu 16.04 中挂载 ntfs 分区时出错

linux - 在复杂查询中使用 sed 命令

c++ - 全局静态动态分配对象 C++

c++ - STL 容器有单元测试吗?

c++ - Makefile vpath 不适用于头文件

java - 如何从命令行将象形文字作为参数传递给 main 方法