2009-03-03 5 views
7

나는 내가 복사 한 len을 반환하는 C 스타일 함수를 사용해야하는 상황에 처해있다. 최대 크기로 조정 한 다음 반환 된 길이를 조정해야한다고 결정했습니다. expand size of vector passed as memory크기 조정시 벡터 채우기 값 사용 안함? C++

resize는 값을 fillValue (항상 0?)로 설정합니다. 그래서 무의미한 초기화가 될 것입니다. 매초 60 회가 적당합니다. 크기 조정시 초기화를 비활성화하는 방법이 있습니까?

+0

죄송합니다. 귀하의 문제를 이해할 수 없습니다 - 일부 샘플 코드를 게시 할 수 있습니까? –

답변

11

기본적으로 아니요. 벡터의 요소는 크기 조정시 기본 구성됩니다 (정수의 경우 0이됩니다).

resize()를 사용하여 메모리를 할당하지 않는다고 가정하면 나중에 성능 문제가되지 않는 한 걱정할 필요가 없습니다.

일반적인 배열을 사용하고 항목 수를 별도의 변수에 저장하는 것이 좋습니다. 이것은 당신에게 최고의 성능을 줄 것입니다.

는 업데이트 :

존 질문 :

정말 메모리를 제로로 을 보장 생성자인가? 나는 가 정의되지 않았다고 생각 했습니까?

예 아니오. 기본형 (int, bool, float 등)에는 0으로 초기화하는 기본 생성자가 있습니다. 그러나 일반 클래스 나 구조체와 달리 컴파일러는 자동으로 클래스를 호출하지 않습니다.

예컨대

int a;   // uninitialized 
int b = int(); // initialized to 0 

만든 요소가 올바르게 0으로 초기화됩니다 보장 항목을 추가 할 때 벡터 : 크기 조정이 후자의 양식을 사용하기 때문에. 암시 적으로 요소를 만드는 모든 STL 컬렉션에 해당합니다.

+0

생성자는 실제로 메모리를 0으로 보장합니까? 나는 그것이 정의되지 않았다고 생각 했는가? –

+0

Yeap, 이유를 설명하는 업데이트를 추가했습니다. –