我寫了一個文本編輯器程序在C++中有簡單的命令:LEFT,RIGHT,HOME,END,BACKSPACE,DELETE,INSERT,現在我需要執行UNDO和REDO功能。在我的程序中,用戶必須能夠撤消最多十個命令。我想使用矢量實現來實現這一點,但我不知道如何設置它。我不知道如何將光標位置和字符存儲到向量中。有人可以提供一些幫助嗎?需要幫助編寫撤消/重做功能的文本編輯器程序
#ifndef CURSOR_H
#define CURSOR_H
#include <stdlib.h>
#include <iostream>
template <class Object>
class Cursor;
// Incomplete Declaration
template <class Object>
class CNode
{
public:
CNode(const Object & theElement = Object(), CNode * n = NULL) : element(theElement), next(n) { }
Object element;
CNode *next;
friend class Cursor<Object>;
};
template <class Object>
class Cursor
{
public:
Cursor();
bool isEmpty() const;
void makeEmpty();
void left ();
void right ();
void del (); //This is the delete operation. I named it del instead of delete as delete conflicts with a C++ keyword.
void back ();
void insert(const Object & x);
void home ();
void end ();
void undo ();
private:
void printText () ;
CNode<Object> *header;
CNode<Object> *cursorPosition;
};
//#include "Cursor.cpp"
#endif
一個環形緩衝區將允許相同的動作,而不需要任何分配/解除分配。 – 2010-10-05 02:40:36
@本,非常真實。但是環形緩衝區不是標準的一部分,我發現了一個渴望與標準容器保持一致的願望;也許我錯了。 Boost提供了一個:http://www.boost.org/doc/libs/1_37_0/libs/circular_buffer/doc/circular_buffer.html – 2010-10-05 02:45:43
「檢測出堅持使用標準容器的願望」:CNode <>是對相反,雖然提到了vector <>。 – 2010-10-05 02:55:51