> 백엔드 개발 > C++ > std::벡터::reserve() 대 std::벡터::resize(): 언제 어느 것을 사용해야 합니까?

std::벡터::reserve() 대 std::벡터::resize(): 언제 어느 것을 사용해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-12-29 13:04:22
원래의
320명이 탐색했습니다.

std::vector::reserve() vs. std::vector::resize(): When Should I Use Which?

차이점 이해: std::Vector::resize() 대 std::Vector::reserve()

주제 std::벡터::reserve() 대 std::벡터::resize()에 대한 논의가 프로그래밍 커뮤니티 내에서 촉발되었습니다. 이 문서의 목적은 벡터 조작에서 이들의 고유한 역할을 명확히 하는 것입니다.

std::Vector::reserve()

std::Vector::reserve()는 메모리를 할당합니다. 지정된 수의 요소에 대해 처리하지만 벡터 자체의 크기는 조정하지 않습니다. 벡터는 원래 논리적 크기를 유지합니다. 이 방법은 벡터에 요소를 추가할 것으로 예상하고 메모리를 사전 할당하여 성능을 최적화하려는 경우에 유용합니다.

std::Vector::resize()

std: :벡터::resize()는 벡터의 크기를 지정된 요소 수로 수정합니다. 벡터를 확장해야 하는 경우 추가 메모리를 할당합니다. Reserve()와 달리 resize()는 모든 새 요소를 기본값으로 초기화합니다.

사용 예

질문에 제공된 코드를 고려하세요.

void MyClass::my_method()
{
    my_member.reserve(n_dim);
    for (int k = 0; k < n_dim; k++)
        my_member[k] = k;
}
로그인 후 복사

응답에 따르면 여기서 Reserve()를 사용한 것은 올바르지 않다고 합니다. 벡터에 요소를 올바르게 쓰려면 resize()를 사용해야 합니다.

void MyClass::my_method()
{
    my_member.resize(n_dim);
    for (int k = 0; k < n_dim; k++)
        my_member[k] = k;
}
로그인 후 복사

Visual Studio 2010 SP1 동작

언급된 코드의 "충돌" 동작 Visual Studio 2010 SP1에서는 응답에 설명된 올바른 동작과 일치합니다. 벡터 크기를 조정하기 전에 벡터의 논리적 크기(이 경우 my_member[5])를 초과하는 요소에 액세스하려고 하면 정의되지 않은 동작이 발생합니다.

예약 및 무효화

Reserve()를 사용한 다음 push_back()을 통해 요소를 추가하면 벡터입니다. Reserve()는 크기 조정 없이 메모리를 할당하는데, 새로운 요소가 추가되면 다른 위치에 배치될 수 있기 때문입니다.

결론적으로, std::Vector::reserve()와 std::Vector는 ::resize()에는 서로 다른 목적이 있습니다. Reserve()는 메모리를 사전 할당하는 반면 resize()는 벡터의 크기를 수정하고 새 요소를 초기화합니다. 효율적인 벡터 조작을 위해서는 차이점을 이해하는 것이 필수적입니다.

위 내용은 std::벡터::reserve() 대 std::벡터::resize(): 언제 어느 것을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿