スワップ可能な要素を備えた固定サイズのコンテナ:実行時にC++、私は次の機能を持つコンテナを探してる
- 固定サイズ。したがって、メモリは少しのチャンクで割り当てられません(
std::list
のように)。 - 要素は交換可能でなければなりません(のようなもの)。
EDIT:リストの 思考:私はちょうど前に、任意の位置から要素を移動する必要があります。 EDIT2: std::list
のようなものを使用したいと思いますが、実行時の固定サイズを利用しています。
スワップ可能な要素を備えた固定サイズのコンテナ:実行時にC++、私は次の機能を持つコンテナを探してる
std::list
のように)。EDIT:リストの 思考:私はちょうど前に、任意の位置から要素を移動する必要があります。 EDIT2: std::list
のようなものを使用したいと思いますが、実行時の固定サイズを利用しています。
あなたが探しているものはそれほど明確ではありません。 std::vector
(最大サイズで作成)と、オブジェクトのための良い実装であるswap
との組み合わせ、または単一のブロックに必要なノードの数を事前に割り当てるstd::list
のカスタムアロケータがあります。
私はTR1の配列を考えるだろう:
std::array<T, int>
または、あなたが持っていない場合は、まだその
すべての意図や目的のために同じであるboost::array<T, int>
。もちろん、要素に対するstd :: swapの妥当性は、適切なコピーコンストラクタ/代入演算子の利用可能性に依存します。
あなたは、構築時にstd::list
の(初期)のサイズを指定することができます。
std::list<Type> myList = std::list<Type>(10);
あなたはまだ、その後、それを縮小/成長することができますが、リストは先頭から10個のデフォルト構築Typeオブジェクトが含まれます。
あなたのニーズに合っていますか?
'std :: list'は私の目的のためにメモリをあまりにも断片化します。 – 0xbadf00d
@ FrEEzE2046:カスタムアロケータを使用すると(別のところで示唆されているように)それを達成することができます。 –
std :: vector?
アレイベース。サイズを指定でき、スワップ機能があります。
あなたはそれを使用しているとは言わなかったので、スピードの問題があるかどうかはわかりません。
ええ、そうです。最も簡単な方法は、カスタムの 'allocator'を使うことです。その前に – 0xbadf00d
があり、boostには特にリスト用のプールアロケータがあり、調べる価値があるかもしれません。 – Nim
@ニムあなたの助けに感謝します。私は 'boost :: pool_alloc'(排他的な割り当て解除)のパフォーマンスを自分自身のカスタム実装と比較してテストしました。適切な状況では「ブースト」がうまくいくように見えますが、私のシナリオでは自分自身のスピードがはるかに速いです。 – 0xbadf00d