データの長い配列 ( n 個のエンティティ) があります。この配列内のすべてのオブジェクトには、いくつかの値があります (オブジェクトのm値としましょう)。そして、私は次のようなサイクルを持っています:
myType* A;
// reading the array of objects
std::vector<anotherType> targetArray;
int i, j, k = 0;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
{
if (check((A[i].fields[j]))
{
// creating and adding the object to targetArray
targetArray[k] = someGenerator(A[i].fields[j]);
k++;
}
}
場合によっては、( n * m ) /10 以下のn * m の有効なオブジェクトがあります。
問題は、メモリをどのように割り当てるかです。targetArray
targetArray.reserve(n*m);
// Do work
targetArray.shrink_to_fit();オブジェクトを生成せずに要素を数えてから、必要なだけのメモリを割り当てて、もう一度サイクルを実行します。
新しいオブジェクトが作成される反復ごとに配列のサイズを変更します。
私の方法のそれぞれに大きな戦術的誤りがあることがわかります。それを行う別の方法はありますか?