std::vector 管理一塊連續、可動態增長的線性內存。std::StringBuilder(StdExt 庫)基於 vector 實現,所有結論對其同樣適用。本文聚焦 vector 的加速技巧、固有缺陷與分配器選擇。
reserve(size)若能預估元素數量,插入前調用 reserve() 可避免多次擴容與搬移,將 push_back 穩定為真 O(1)。
vector 無 push_front,因頭部插刪需搬移所有元素(O(N))。需大量頭部操作時,改用 deque(兼具隨機訪問)或 list。
對策: 超大字符串/文本處理請改用 std::TextPool(基於 deque)或 std::Rope(樹結構),它們不要求物理連續。
vector 模板參數 AllocT 預設 std::allocator。GC Allocator 擅長小塊頻繁分配,但 vector 的線性大塊增長模式無法受益,反而增加開銷。同理 std::string(basic_string)也不適用。
reserve 極快認清 vector 的「線性連續」本質與邊界,才能在架構選型中避開性能陷阱。