我有一長串數據(n實體)。該數組中的每個對象都有一些值(比如說,對象的值爲m)。和我有一個像週期:填充未知大小的std :: vector的最快方法
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++;
}
}
在一些情況下,我有Ñ *米有效對象,在一些(Ñ *米)/ 10或更小。
問題是如何爲targetArray
分配內存?
-
targetArray.reserve(n*m);
// Do work
targetArray.shrink_to_fit(); 計數的要素,而不會產生對象,然後,因爲我需要分配儘可能多的內存,並用循環一次去。
在創建新對象的每次迭代中調整數組的大小。
我在每種方法中都看到了巨大的戰術錯誤。另一種方式來做到這一點?
您是否考慮使用其他容器'std :: dequeue'而不是'std :: vector' ?? –
它會在每個創作中添加內存嗎? –
你有沒有考慮過'vector :: reserve()'? – jrok