私は、std::vector
またはstd::deque
という仕事をしてくれるという意見を2番目(または多分3番目)にします。私が追加する唯一の事柄は、std::vector<T>
とstd::list<T>
の間で決定を導くべき追加の要素です。これらは、T
の特性と、使用する予定のアルゴリズムと関係があります。
最初はメモリオーバーヘッドです。 Std::list
はノードベースのコンテナなので、T
がプリミティブ型または比較的小さなユーザー定義型の場合は、ノードベースのリンケージのメモリオーバーヘッドが無視できない場合があります。std::list<int>
は少なくとも3 * sizeof(int)
の記憶域を使用する可能性があると考えてくださいstd::vector
は小さなヘッダーオーバーヘッドでsizeof(int)
のストレージのみを使用します。 Std::deque
はstd::vector
に似ていますが、小さなオーバーヘッドはN
に線形です。
次の問題は、コピー構築のコストです。 T(T const&)
がすべて高価な場合は、std::vector<T>
をクリアしてください。これは、ベクターのサイズが大きくなるにつれてコピーが多数生成されるためです。これはstd::deque<T>
が明確な勝者であり、std::list<T>
も候補者です。
通常、コンテナの種類の決定を導く最後の問題は、アルゴリズムがイテレーターの無効化の制約とstd::deque
で機能できるかどうかです。コンテナ要素をたくさん操作する(ソート、途中で挿入する、シャッフルするなど)場合は、順序を操作するためにリンケージポインタをいくつかリセットする必要があるため、std::list
に傾けたいと思うかもしれません。
slistはsgi STLディストリビューションの一部ですが、C++標準ライブラリの一部ではありません。 C++の0x/C++ 1x(次のC++バージョン)ではstd :: forward_listがあります。 –
ありがとう、私はまた今すぐそれを学んだ。 –
STLにstd :: listクラスもあります。 –
mmmmmmmm