2

我正在创建一个思维导图应用程序,我想知道“笔记”编辑器的最佳数据结构是什么。笔记可能只是几个符号,可能是页面长,并且正在更新、编辑、随机播放等等。该应用程序旨在在移动平台上运行,因此处理和内存开销应该是最小的。

我的基本想法是实现一个绳索/链表类型结构,在编辑过程中对笔记进行分段,以避免在容器已满时重新分配笔记的开销,并避免分配不必要的空间,例如动态增长的向量。

然而,过多的分片笔记本身不可避免地会带来开销,因此我的第二部分实现计划将在笔记编辑期间使用的绳索结构转换为顺序数据结构,以便存储和快速阅读。

所以基本上对象是从顺序数据结构中存储和读取的,但是在编辑时它们会被复制到碎片数据结构中,当编辑完成时,对象会被转换回来。

这是个好主意吗?如果没有,那么欢迎提出建议。无论哪种方式,有人知道我可以从中学习一些类似的开源实现吗?

4

2 回答 2

3

关于开源,总是有 emacs :-)。但我怀疑你正在寻找更简单的东西。

这里没有一个正确的答案。我见过的传统实现使用一个非常大的缓冲区(std::vector<char>今天),分为三个逻辑块:光标前的文本、空闲空间和光标后的文本。使用此解决方案,移动光标需要移动光标移动的文本,但在光标处插入和删除文本不涉及任何移动。

我不确定今天传统方法是否合理(尽管可能在嵌入式机器上)。我会 std::vector<char>以一种非常幼稚的方式开始使用,并且只有在我从典型的编辑会话中获得分析数据后才更改它。但是,我会将它包装在一个Buffer类中,只提供我需要的接口,以简化未来向不同策略的迁移。

于 2011-10-26T12:43:18.830 回答
0

这取决于您实际计划编辑的文本量。以前的答案建议std::vector<char>哪个可以达到极限。

您征求建议:在实现 Wiki 编辑器时,我从Scintilla学到了很多,特别是相关部分。

于 2011-10-26T13:27:31.850 回答