我正在尝试为非常简单的文本编辑器实现撤消功能。目前,我有一个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);
~~~~~~~~~~~~~~~^~~~~
那么如何在不删除字符串中剩余的所有内容的情况下擦除字符串的这一部分呢?
答案 0 :(得分:3)
不应该是:lines[row].erase(lines[row].begin() + column)