社区
数据结构与算法
帖子详情
【100分】redo undo
TheRealBo
2011-08-25 11:18:15
想写个redo undo,各位高手麻烦给点思路
比如,Insert,insert,remove,undo,undo,modify,insert,undo,undo,redo,redo
最后操作为insert,modify,insert
...全文
252
13
打赏
收藏
【100分】redo undo
想写个redo undo,各位高手麻烦给点思路 比如,Insert,insert,remove,undo,undo,modify,insert,undo,undo,redo,redo 最后操作为insert,modify,insert
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
TheRealBo
2011-09-12
打赏
举报
回复
再顶一次,要结贴了
cc之家
2011-08-30
打赏
举报
回复
[Quote=引用 7 楼 kingwolfofsky 的回复:]
Command模式?
[/Quote]完全正确!
struct mark{
infotype;
infocontext;
};
//用vector 也可以
vector<mark*> m_vectorMark;
TheRealBo
2011-08-29
打赏
举报
回复
[Quote=引用 10 楼 jingtianwen 的回复:]
如果只记录操作,实现redo容易,但实现undo是要把要撤消的命令效果去掉,还得恢复之前的状态,不好整吧。
如果记录操作目标的状态,是不是有点太小题大作了?
[/Quote]
就是要实现redo undo这两个操作,哪里小题大做?不是记录操作目标的状态,可能你理解错了
竞天问
2011-08-28
打赏
举报
回复
如果只记录操作,实现redo容易,但实现undo是要把要撤消的命令效果去掉,还得恢复之前的状态,不好整吧。
如果记录操作目标的状态,是不是有点太小题大作了?
TheRealBo
2011-08-27
打赏
举报
回复
[Quote=引用 4 楼 huangliulove 的回复:]
定义两个栈,一个保存已经操作的操作,一个保存撤销的操作
每操作一次,第一个栈入栈,第二个栈清空;
每撤销一次,第一个栈出栈,第二个入栈;
每重做一次,第二个栈出栈,第一个栈入栈;
大致思路就这样咯
[/Quote]
没看很明,能再说清楚一些吗?
TheRealBo
2011-08-27
打赏
举报
回复
[Quote=引用 8 楼 zeroasan_ 的回复:]
说明:操作是指undo redo之外的insert,modify等操作。
用一个栈stack来保存操作记录,下标C标志当前操作的位置。(默认C即为stack的最后一个元素)stack中C之后的元素是你undo的操作。
步骤1. 每次Insert和modify,操作入栈,C++。
步骤2. undo之后,C相应向回移动,每次undo做C--
步骤3. 分支:
3.1. ……
[/Quote]
我去研究一下
zeroasan_
2011-08-27
打赏
举报
回复
说明:操作是指undo redo之外的insert,modify等操作。
用一个栈stack来保存操作记录,下标
C
标志当前操作的位置。(默认C即为stack的最后一个元素)stack中
C
之后的元素是你undo的操作。
步骤1. 每次Insert和modify,操作入栈,C++。
步骤2. undo之后,C相应向回移动,每次undo做C--
步骤3. 分支:
3.1. 若下一步为redo, 则C++
3.2. 若下一步为undo, 则C--
3.3 若下一步为操作,则先清空stack中C之后的元素,再添加操作入栈,C再次为stack的最后一个元素。
eclipse的文本编辑器就这样,undo之后的,再次有输入操作,那么之前undo的那些就不能redo了,操作信息抛弃了。
KingWolfOfSky
2011-08-27
打赏
举报
回复
Command模式?
lament_gates
2011-08-27
打赏
举报
回复
堆栈呀~~~把所有的操作和撤销操作都保存下来.
AndyZhang
2011-08-25
打赏
举报
回复
将你的操作全部记录下来,然后移动指针。每个操作就是一个对象,一个单元。
具体可以加上操作类型,时间,顺序等属性。
奋斗吧
2011-08-25
打赏
举报
回复
定义两个栈,一个保存已经操作的操作,一个保存撤销的操作
每操作一次,第一个栈入栈,第二个栈清空;
每撤销一次,第一个栈出栈,第二个入栈;
每重做一次,第二个栈出栈,第一个栈入栈;
大致思路就这样咯
BaronZ
2011-08-25
打赏
举报
回复
用一个指针数组,操作一次保存成为一个元素。如果undo,则数组下标-1,redo则数组下标+1
一叶之舟
2011-08-25
打赏
举报
回复
帮你顶一下
MySQL事务日志:
red
o log和
undo
log详解
RED
O LOG 称为`重做日志`,提供再写入操作,恢复提交事务修改的页操作(我们对数据进行修改,数据会报存在内存中,此时还没有保存在磁盘当中,如果此时由于不可抗因素如宕机,事务将不能保证持久性。而`
red
o log`就阔以保证了,我们在修改完数据之后,将相关的数据保存到
red
o log中,就算出现宕机我们也可以把更新过的数据从`
red
o log`中进行恢复刷新到磁盘中),用来保证事务的持久性。 -
UNDO
LOG 称为`回滚日志`,回滚行记录到某个特定版本,用来保证事务的原子性、一致性。
MySQL事务日志--
red
o,
undo
详解
事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?事务的隔离性由锁机制实现。而事务的原子性、一致性和持久性由事务的
red
o日志和
undo
日志来保证。
RED
O LOG称为重做日志,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。
UNDO
LOG称为回滚日志,回滚行记录到某个特定版本,用来保证事务的原子性、一致性。有的DBA或许会认为
UNDO
是
RED
O的逆过程,其实不然。
通用:MySQL-
Red
o log和
Undo
log原理
Red
o Log(重做日志)是InnoDB实现事务持久性(ACID中的D)的核心机制,本质是一份"物理日志"——记录的是数据页的修改动作(如“将表user的第
100
号数据页中,偏移量500的位置值从
100
更新为200”),而非SQL语句本身。崩溃恢复:系统崩溃后,未写入磁盘的数据页可通过
Red
o Log重新执行修改操作,恢复已提交事务的数据;减少磁盘I/O:事务执行时,只需将修改记录到
Red
o Log(顺序写入),无需立即刷写数据页(随机写入),大幅降低磁盘I/O开销。
Red
o日志和
Undo
日志
Red
o日志和
Undo
日志
Mysql—事务:Mysql事务日志(
RED
O,
UNDO
)
深入理解Mysql的
RED
O日志和
UNDO
日志,刨析底层
数据结构与算法
33,025
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章