2011-07-05 14 views
1

スワップ可能な要素を備えた固定サイズのコンテナ:実行時にC++、私は次の機能を持つコンテナを探してる

  • 固定サイズ。したがって、メモリは少しのチャンクで割り当てられません(std::listのように)。
  • 要素は交換可能でなければなりません(のようなもの)。

EDIT:リストの 思考:私はちょうど前に、任意の位置から要素を移動する必要があります。 EDIT2: std::listのようなものを使用したいと思いますが、実行時の固定サイズを利用しています。

答えて

2

あなたが探しているものはそれほど明確ではありません。 std::vector(最大サイズで作成)と、オブジェクトのための良い実装であるswapとの組み合わせ、または単一のブロックに必要なノードの数を事前に割り当てるstd::listのカスタムアロケータがあります。

+0

ええ、そうです。最も簡単な方法は、カスタムの 'allocator'を使うことです。その前に – 0xbadf00d

+1

があり、boostには特にリスト用のプールアロケータがあり、調べる価値があるかもしれません。 – Nim

+0

@ニムあなたの助けに感謝します。私は 'boost :: pool_alloc'(排他的な割り当て解除)のパフォーマンスを自分自身のカスタム実装と比較してテストしました。適切な状況では「ブースト」がうまくいくように見えますが、私のシナリオでは自分自身のスピードがはるかに速いです。 – 0xbadf00d

3

私はTR1の配列を考えるだろう:

std::array<T, int> 

または、あなたが持っていない場合は、まだその

すべての意図や目的のために同じである
boost::array<T, int> 

。もちろん、要素に対するstd :: swapの妥当性は、適切なコピーコンストラクタ/代入演算子の利用可能性に依存します。

+0

'boost :: array 'はコンパイル時のサイズです。さらに、私は要素をコピーしたくないので、リストに似た何かを使用したいと思います。 – 0xbadf00d

+0

申し訳ありません。あなたが割り当てを減らしたいなら、['std :: vector :: resize'](http://www.cplusplus.com/reference/stl/vector/resize/)はあなたの友人です。必要が生じない限り、再割り当てしないことに関して適切な保証があります。 – sehe

0

あなたは、構築時にstd::listの(初期)のサイズを指定することができます。

std::list<Type> myList = std::list<Type>(10); 

あなたはまだ、その後、それを縮小/成長することができますが、リストは先頭から10個のデフォルト構築Typeオブジェクトが含まれます。

あなたのニーズに合っていますか?

+0

'std :: list'は私の目的のためにメモリをあまりにも断片化します。 – 0xbadf00d

+0

@ FrEEzE2046:カスタムアロケータを使用すると(別のところで示唆されているように)それを達成することができます。 –

0

std :: vector?

アレイベース。サイズを指定でき、スワップ機能があります。

あなたはそれを使用しているとは言わなかったので、スピードの問題があるかどうかはわかりません。

関連する問題