为文本编辑控件实现缓冲区的最佳方法是什么?

dev*_*roy 5 c++ winapi

所以我正在制作自定义编辑控件.为了跟踪编辑控件的内容,我使用了动态分配的char数组.

  • 现在,我知道在某些情况下我需要在数组的中间插入,例如当用户点击某个特定点时.所以,我在思考,而不是字符数组,我可以使用std :: vector,所以我可以使用.insert函数,也不必太在意内存管理.
  • 我也在考虑将输入流直接存储到一个数组/单词矢量中(不保持连续缓冲区),因为我的目的是实现语法高亮.

哪种方法更好?为什么?

650*_*502 4

对于当今计算机的文本缓冲区,您确实可以只使用单个连续缓冲区(例如向量),因为 CPU 足够快,足以使插入时间(o(n)使用这种简单方法的操作)仍然是一个可行的选择。

在过去,当计算机速度慢数千倍时,一种常见的简单方法是将文本保留在缓冲区中,但有一个与光标位置相对应的“洞”,使插入成为一项o(1)操作,并将字符从洞的一侧移动到缓冲区。其他当光标在文本中移动时(基本上使光标移动成为一种o(k)操作,其中k是跳过的字符数)。

对于为程序员设计的编辑器,文本将被细分为逻辑行,因此使用基于行指针数组的方法似乎是合适的。即使这会让一些跨行操作有些烦人,一些基于行的操作也会变得更容易......显示中的行编号成为一个微不足道的问题,特别是如果您不需要实现换行(无论如何代码都很可怕)通过截断和水平滚动来代替。

  • 使用一个连续缓冲区的编辑器在编辑大量文件(例如日志文件)时会遭受可怕的痛苦。对于源文件来说这很好,但人们不可避免地希望在编辑器中加载_所有内容_。因此需要某种分段。 (2认同)