私はstd::vector
がconst std::string
であると言います。コンテナ内の定数文字列を連続的に割り当てます
std::vector<const std::string> strs;
今ここでデフォルトの動作は、実際の文字列のコンテナが含まれる文字列の繰り返し処理を行う場合、ほとんどのデータの任意のプリフェッチを無効にし、ヒープ、上の任意の場所に割り当てることができるということです。しかし
strs.push_back("Foo"); // allocates char block on heap
strs.push_back("Boo"); // allocates char block on heap
、文字列であるため、「constの」私はchar型のブロックが連続して割り当てられるか、文字列の繰り返し処理を行う場合、最も効率的なキャッシュの動作を有するために(可能な場合)互いに近接するようにしたいと思います。
この動作を実現する方法はありますか?
答えに示されている問題に加えて、constオブジェクトのベクトルを持つことさえできません。ストアドタイプの要件には、コピー可能(またはC++バージョンに応じて移動可能)が含まれます。 Constオブジェクトは失敗します。 –
@BoPersson:良い点。私は文字列が変更されていないことを確認することはプログラマに任されていると思います。 – ronag
ベクトル自体をconstにすると、そのメンバを変更することはできません。しかし、ベクトルも文字列も実際にそれを認識することはありません。 –