如果你正在考慮像源代碼查看器(參見:「落實語法高亮」)與一個可變的後備存儲,你可能會發現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;
};
}
這是一個非常好的解釋,謝謝!是的,文本將被劃分爲邏輯線,並且我正在進行水平滾動。 – devjeetroy
在編輯大量文件(如日誌文件)時,使用一個連續緩衝區的編輯器遭受可怕的損失。對於源文件很好,但人們不可避免地想要在他們的編輯器中加載_everything_。因此需要某種分割。 –