【发布时间】:2014-12-10 04:26:28
【问题描述】:
我正在尝试为一个非常简单的文本编辑器实现撤消功能。目前,我有一个 std::vector 用于存储用户输入的字符串,用于存储特定行,该行充当用户所在的当前行号。
我能够使用以下代码将一个字符插入到当前字符串中:
void Editor::insertCharacter(char& c)
{
lines[row].insert(column, 1, c);
column++;
}
在这种情况下,我将字符插入到当前行的特定列中。此列充当光标应该在的位置的索引,因此通过执行column++,光标在插入字符后向右移动一个位置。这种方法效果很好。我现在遇到的问题是当我尝试撤消插入字符时。
基本上,我必须擦除column当前所在的字符,然后递减column以实现“撤消”
我尝试做的第一件事是像这样删除字符:
lines[row].erase(column)
以下是我运行此程序时发生的情况的示例(其中 | 是光标位置):
hello| (user enters hello)
h|ello (user moves cursor back to column 2)
hTEST|ello (user enters the word TEST)
(user hits ctrl + z which triggers undo)
hTES| (final output)
所以,我上网查了一下,发现可以使用迭代器 + 偏移量来删除变量的索引。所以我更新了撤消功能,如下所示:
lines[row].erase(lines.begin() + column)
但这不能编译,我得到这个错误:
error: no matching member function for call to
'erase'
lines[row].erase(lines.begin() + column);
~~~~~~~~~~~~~~~^~~~~
那么我应该如何擦除字符串的这一部分而不擦除字符串中剩余的所有内容?
【问题讨论】: