Я работаю над текстовым редактором в течение некоторого времени.Я сделал собственный элемент управления редактирования с нуля, и теперь у меня есть основы.Проблема, с которой я сталкиваюсь, касается линейного управления.Поскольку моя программа полагается на разделение входного текста на строки (текст печатается построчно), управление строками довольно важно.Я использовал std :: vector для хранения позиций строк.Я использую таблицу фигур для обработки текста, но для простоты, скажем, у меня есть массив символов.Я добавляю / вставляю элемент в вектор строки каждый раз, когда пользователь нажимает ввод.Проблема в том, что каждый раз, когда пользователь вставляет символ, вся структура нарушается.Например:
0 1 2 3 4 5 6 7 8 9 10
text = ['h','e','l','l','o','\n','W','o','r','l','d']
state of line vector :
line[0] = 0
line[1] = 6
Допустим, пользователь вставляет символ ('x') после текста [2]:
0 1 2 3 4 5 6 7 8 9 10 11
text = ['h','e','l','x','l','o','\n','W','o','r','l','d']
state of line vector :
line[0] = 0
line[1] = 6
Из-за вставки мне нужно обновитьзначение каждого элемента в векторе линий после текущей строки.То же самое для удаления.Если в программе 1000 строк и пользователь редактирует первую строку, было бы совершенно неэффективно обновить все 999 элементов (кроме первой).
Я думал о том, чтобы каждая строка была независимой друг от друга.Но это может привести к осложнениям, когда существующая строка разделена на две строки.Итак, я хотел бы знать, как можно решить эту проблему?
Редактировать: Просто для пояснения, я использую структуру данных, называемую Piece Table.Я не использую массив символов.Вот что такое структура данных таблицы элементов: http://www.cs.unm.edu/~crowley/papers/sds.pdf