두 기능은 크게 다른 일을합니다!
이 resize()
메소드는 (그리고 인자를 생성자에게 전달하는 것은 그것과 동등합니다) 벡터에 적절한 수의 요소를 삽입하거나 삭제하여 주어진 크기로 만듭니다 (값을 지정하기 위해 선택적인 두 번째 인수가 있습니다). 그것은 영향을 미치며 size()
, 반복은 모든 요소를 거치며, push_back은 그 뒤에 삽입되며를 사용하여 직접 액세스 할 수 있습니다 operator[]
.
이 reserve()
메소드는 메모리 만 할당하지만 초기화되지 않은 상태로 둡니다. 에 영향 capacity()
을 주지만 size()
변경되지 않습니다. 벡터에 아무것도 추가되지 않기 때문에 객체에 대한 값이 없습니다. 그런 다음 요소를 삽입하면 미리 할당 되었기 때문에 재 할당이 발생하지 않지만 이것이 유일한 효과입니다.
그래서 그것은 당신이 원하는 것에 달려 있습니다. 기본 항목을 1000 개 배열하려면을 사용하십시오 resize()
. 1000 개의 항목을 삽입 할 것으로 예상되는 배열을 원하고 두 개의 할당을 피하려면을 사용하십시오 reserve()
.
편집 : Blastfurnace의 의견에 따라 질문을 다시 읽고 이해했습니다. 귀하의 경우 정답이 수동으로 사전 할당되지 않습니다 . 필요할 때 요소를 계속 삽입하십시오. 벡터는 필요에 따라 자동으로 재 할당되며 언급 된 수동 방법보다 더 효율적으로 수행합니다 . reserve()
이해하기 쉬운 유일한 경우 는 사전에 쉽게 구할 수있는 전체 크기를 합리적으로 정확하게 추정 할 때입니다.
EDIT2 : 광고 질문 수정 : 초기 견적이있는 경우 reserve()
해당 견적입니다. 충분하지 않은 것으로 판명되면 벡터로 설정하십시오.
std::vector
.