我的天啊!我们的OP有一位糟糕的老师,他给人的任务是这样的
C / C ++分配:
创建一个记事本,允许用户在控制台上编写文本。为此,用户应
能够控制和跟踪光标的移动。用户可以访问,添加和删除
文本。要添加或删除文本,用户可以将光标移至该位置(使用箭头键),然后
执行所需的操作。程序的工作方式(即光标的移动,添加和
删除操作)必须与真实记事本的工作方式保持一致。但是,您没有
处理自动换行。
此外,用户应该能够分别使用S和L将福彩12选5走势图保存并加载到文本文件中。
该程序将自动将福彩12选5走势图保存在文件save.txt中,并从同一文件加载福彩12选5走势图。
无需询问用户文件名。使用Q退出记事本。别忘了
实现析构函数。
在内部,记事本由二维双链表组成。它的实现只是
像带有附加属性的双向链表,它可以在两个维度上增长。由于文字可以
如果多行编写,则2D链表的每一行代表一行。每个节点包含四个
它用来连接到节点之前,之后,下方和上方的链接。此外,每个节点都可以存储
一个角色。
这是进行文本编辑器的糟糕方法。考虑一个基本节点如下所示:
class Node
{
public char Char { get; set; }
public Node Before { get; set; }
public Node After { get; set; }
public Node Above { get; set; }
public Node Below { get; set; }
}
在64位计算机上,对节点的这4个引用中的每一个将占用8个字节。保留在那里的字符将占用2个字节(因为.NET Framework中的字符为16位)。而且我怀疑编译器还会在字符和第一个引用之间添加一些填充以使其达到适当的对齐方式,因此有效地整个节点将用尽2 + 2 + 4 * 8 == 36字节或2 + 6 + 4 * 8 == 40个字节那是每个字符。因此,由1MB ASCII文本组成的文本文件将占用36MB至40MB的RAM。那是一个糟糕的文本编辑器。即使是Visual Studio,它也是内存消耗者,也没有这种内容与内存开销之比。
是的,是的,我知道我上面的链接描述了一个二维双重链接列表,但这
其他链接,细节较少 也具有基本相同的分配,并且该线程上的OP将其福彩12选5走势图结构称为4D链表。