데이터 배열이 길어졌습니다 (n 엔티티). 이 배열의 모든 객체에는 몇 가지 값이 있습니다 (객체에 대해 m 값이라고 가정 해 봅시다). 난 N *미터 유효한 오브젝트가 어떤 경우알 수없는 크기의 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++;
}
}
일부 (N *m)/10 이하의 경우 : I과 같은주기를 갖는다.
질문은 어떻게 targetArray
에 대한 메모리를 할당합니까?
targetArray.reserve(n*m);
// Do work
targetArray.shrink_to_fit();
- 은 생성 객체없이 요소를 계산하고, 내가 필요로하는 다음과 같은 많은 메모리를 할당하고 사이클을 한 번 더 함께 할 것입니다.
새 개체가 생성되는 모든 반복마다 배열의 크기를 조정하십시오.
나는 각각의 방법에서 거대한 전술적 실수를 본다. 그것을하는 또 다른 방법이 있습니까?
다른 컨테이너를 사용해 보셨습니까? 'std :: vector' 대신'std :: dequeue'를 사용합니다. ?? –
모든 생성에 메모리가 추가됩니까? –
'vector :: reserve()'를 고려 했습니까? – jrok