Если вы рассматриваете что-то вроде средства просмотра исходного кода (см .: «для реализации подсветки синтаксиса») с изменяемой резервной копией, вы можете найти std::list<std::string>
хорошей отправной точкой, и это может быть излишним, если строка мала.
Имея непрерывный буфер для вашего текста (например, один большой std::string
или std::vector
), вы будете иметь много перемещения и изменения размера во время редактирования, а также много сканирования при перемещении.Эти перемещения и изменения размера приведут к многочисленным непрерывным выделениям, инициализации буфера, перемещению и освобождению старой памяти.Это также ограничивает способ кэширования данных (если это важно).Время поиска будет немного медленнее со списком, но ваши движения и мутации будут намного быстрее, чем использование непрерывного буфера для всего файла.
std::list<std::string>
имеет некоторые приятные свойства, потому что он растет и мутирует какнабор строк (например, для каждой строки или абзаца).
Этот обзор детализирует сильные стороны списка и сравнивает его с другими контейнерами: http://www.cplusplus.com/reference/stl/list/
Если вы хотите связать некоторые данные сстрока / строка, затем просто создайте список из них:
namespace MON {
class t_line {
public:
/* ... */
private:
std::string d_string;
t_lexer_stuff d_lexerStuff;
};
}