注:パフォーマンスはアプリケーションで非常に重要です! 再割り当てを避けるためには、最悪のシナリオで十分なバッファストレージを割り当てる必要があります。この時私はstd :: vector +自分自身のサイズ変数を使うべきでしょうか?
ルックは、これは私が通常のstd ::ベクトルを使用する方法である:私はのstd ::ベクトルを使用+ +私自身のサイズ変数またはSTDのサイズを変更する必要があり、私は、意思決定の問題を抱えている
//On startup...
unsigned int currVectorSize = 0u;
std::vector<MyStruct> myStructs;
myStructs.resize(...); //Allocate for the worst case scenario!
//Each frame, do this.
currVectorSize = 0u; //Reset vector, very fast.
run algorithm...
//insert X elements in myStructs if condition is met
myStructs[currVectorSize].member0 = ;
myStructs[currVectorSize].member1 = ;
myStructs[currVectorSize].member2 = ;
currVectorSize++;
run another algorithm...
//insert X elements in myStructs if condition is met
myStructs[currVectorSize].member0 = ;
myStructs[currVectorSize].member1 = ;
myStructs[currVectorSize].member2 = ;
currVectorSize++;
Another part of the application uses myStructs and currVectorSize
を::ベクトル+予備+ push_back +クリア+サイズ?
私は別のサイズの変数を浮動させたくありませんが、clear()関数は遅く(リニア時間)、push_back関数には境界チェックのオーバーヘッドがあります。デストラクタを呼び出したり、線形時間で動作させたりすることなく、フレームごとに一定の時間内にサイズ変数をリセットする必要があります。 結論:私は私の古いデータを破壊したくない、私はちょうど現在のサイズ/現在の数を挿入する要素を各フレームの変数をリセットする必要があります。
あなたのオブジェクトが簡単に破壊可能である場合、 'clear()'は一定の時間でなければなりません。最もパフォーマンスの高いものが既に分かっているように聞こえます(ただし、それをプロファイルしてください!)ので、スピード/パフォーマンスを最適化しているなら、あなたはすでにあなたの答えが分かっています。 – Cornstalks
これは、この特定のケースでこれを実行する最善の方法だと思います。 clear関数について:はい、POD型では一定であるべきですが、異なるコンパイラ...あなたはわかりません... – karl88