9

「一連の文字」を繰り返し挿入できる「文字列プール」オブジェクトが必要です (このフレーズは、std::string または C 文字列と混同せずに「文字列」を意味するために使用します)、シーケンスへのポインターを取得します。 、およびプールを拡大する必要がある場合にポインターが無効にならないことが保証されます。シンプルなstd::stringプールを使用すると、文字列が初期容量を超えたときに再割り当てされる可能性があるため、機能しません。これにより、以前のすべてのポインターが無効になります。

プールは際限なく大きくなるわけではありません。clear()メソッドを呼び出す時点が明確に定義されていますが、最大容量も確保したくありません。動かなくても成長できるはずです。

私が検討している 1 つの可能性は、文字の新しいシーケンスをそれぞれ a に挿入してforward_list<string>取得することbegin()->c_str()です。もう 1 つは への挿入unordered_set<string>ですが、 unordered_set を大きくする必要があるときに何が起こるかを見つけるのに苦労しています。私が検討している 3 番目の可能性 (あまり熱心ではありません) は、一連の文字を連結する 1K バッファーの独自のチェーンを展開することです。これには、このプロジェクトの要件である最高のパフォーマンスが得られるという利点があります (推測します)。

他の人がこれにどのようにアプローチすることを推奨するかを聞くことに興味があります。

更新 1: std::string または null で終了する文字配列を意味することなく、「文字列」の一般的な概念と同等であるというフレーズ「文字列」の使用を明確にするために編集されました。

4

3 に答える 3