現在的專案中有乙個文字編輯器(類似記事本的),是之前的程式設計師寫的,他是自己管理redo-undo棧,我看了一下,根本沒法用那個redo-undo功能(只能redo-undo一次,暈死),而且其中的邏輯超級亂。
我改寫了一下,**還算簡潔,由於是公司的專案,我不能貼**,只能講講我實現的思路。
具體就是在編輯框輸入的同時,將前面的輸入壓到undo棧,但要注意,當前在文字框的文字應該將其入redo棧。
每次編輯框發生修改時,undo棧壓入的是redo棧的top元素,然後當前編輯框中的文字再入redo棧。但要注意的是編輯框剛開啟時是有初始化值的(類似記事本開啟乙個txt檔案,txt中本身存在內容),因此一開始的時候這個初始值是要壓入到undo棧而不能壓入到redo棧。
做undo的時候注意undo棧不能一直pop,因為undo的底元素師文字框的初始值。
而redo的時候redo棧也不能一直pop,因為redo棧的頂元素是最後修改鍵入的那個元素。
而文字框顯示的值是redo或者undo的最新值。當然,這個值如前面所說,是棧裡面的元素,可能這個元素是棧中彈出的元素,也可能只是取棧頂的元素(看是否到達了redo-undo棧的size為1)。
今天做了幾個題大賽的
第四章 quicksum include include using namespace std int main cout include using namespace std int main cout include using namespace std int main cout inc...
今天被挑戰自己的基本功了,結果狂汗!
unsigned long aaa istringstream in 1 in aaa cout aaa sscanf 1 ul aaa cout aaa 汗!狂汗!起因由此 手頭試了wxdevcpp gcc4.4.0 code blocks gcc4.4.4 vc2008 vc6 bcb6 bcb...
今天做了乙個有趣的測試
雖然很忙,居然很懶,不想做事。在電腦跟前瀏覽 突然看到了一篇文章,是 joel spolsky 周思博 寫給畢業生的,裡面有這麼一段 無論你知道多少高階的控制結構,知道如何進行錯誤處理,如果你不能解釋為什麼while s t 的意思是進行字串拷貝 而且對你而言這是世界上最自然,最易懂的 那麼你就是在...