> 백엔드 개발 > C++ > `std::벡터::reserve()` 대 `std::벡터::resize()`: 효율적인 메모리 관리를 위해 어느 것을 사용해야 합니까?

`std::벡터::reserve()` 대 `std::벡터::resize()`: 효율적인 메모리 관리를 위해 어느 것을 사용해야 합니까?

Patricia Arquette
풀어 주다: 2024-12-21 03:46:09
원래의
879명이 탐색했습니다.

`std::vector::reserve()` vs. `std::vector::resize()`: When to Use Which for Efficient Memory Management?

std::Vector::resize() 대 std::Vector::reserve()

C에서는 std:: 벡터는 동일한 유형의 요소를 저장하는 데 일반적으로 사용되는 컨테이너입니다. 메모리에서 서로 다른 역할을 하는 std::Vector::reserve()std::Vector::resize()라는 두 가지 메서드를 제공합니다. Management.

std::Vector::reserve()

  • 벡터의 논리적 크기를 수정하지 않고 지정된 수의 요소에 대해 메모리를 할당합니다.
  • 재할당 없이 향후 push_back 또는 삽입을 수용할 수 있도록 보장 memory.
  • 벡터의 크기를 조정하거나 해당 요소를 수정하지 않습니다.

std::Vector::resize()

  • 벡터의 크기를 지정된 크기로 조정하고 다음과 같이 요소를 추가하거나 제거합니다. 필요합니다.
  • 새로 추가된 요소를 기본값으로 초기화합니다.
  • 벡터의 메모리가 재할당되어 기존 참조, 반복자 또는 포인터가 무효화될 수 있습니다.

제공된 코드의 적용

주어진 샘플에서 코드에서 멤버 벡터 my_member는 처음에 std::Vector::reserve()를 사용하여 n_dim 요소에 대한 메모리를 할당합니다. 그러나 어떤 요소도 초기화되지 않으며 현재 논리적 크기(0)를 초과하는 요소에 액세스하면 정의되지 않은 동작이나 오류가 발생합니다.

벡터에 요소를 쓰려면 std::Vector::resize()를 사용해야 합니다. 사용된. 이 경우 벡터 크기를 n_dim으로 조정하고 모든 요소를 ​​0으로 초기화합니다.

VS2010 SP1 동작

제공된 테스트 코드는 VS2010 SP1을 사용한 디버그 빌드에서 실패합니다. 논리적 크기가 0인 벡터의 요소 5에 액세스하려고 시도합니다. 이는 정의되지 않은 동작으로 간주되어 충돌이 발생합니다.

결론

제공된 정보에 따르면 요소를 작성해야 하는 경우 std::Vector::resize()를 사용하는 것이 옳습니다. 벡터. std::벡터::reserve()는 향후 삽입이 발생할 것으로 알려져 있고 이를 위해 메모리를 미리 예약해야 하지만 요소 값을 미리 초기화할 필요가 없는 경우 사용해야 합니다.

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

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