我需要一个“字符串池”对象,我可以在其中重复插入一个“字符序列”(我使用这个短语来表示“字符串”,而不会将其与 std::string 或 C 字符串混淆),获取指向该序列的指针,并保证如果/当池需要增长时指针不会失效。使用简单std::string
的 as 池将不起作用,因为当字符串超出其初始容量时可能会重新分配字符串,从而使所有先前指向它的指针无效。
池不会无限制地增长——有明确定义的点,我将在其clear()
上调用方法——但我也不想在其上保留任何最大容量。它应该能够生长,无需移动。
我正在考虑的一种可能性是将每个新的字符序列插入 aforward_list<string>
并获取begin()->c_str()
. 另一个是插入到 中unordered_set<string>
,但我很难找出当 unordered_set 必须增长时会发生什么。我正在考虑的第三种可能性(不太热情)是滚动我自己的 1K 缓冲区链,我将字符序列连接到其中。这具有(我猜)具有最高性能的优势,这是该项目的要求。
我很想听听其他人会如何建议解决这个问题。
更新 1:编辑以澄清我对短语“字符序列”的使用等同于“字符串”的一般概念,而不暗示 std::string 或以空字符结尾的字符数组。