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

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

Susan Sarandon
Susan Sarandon원래의
2024-12-25 01:03:10628검색

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

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

최근 토론에서 std:: 사용에 대한 주제가 나왔습니다. 벡터::예약() 대 std::벡터::resize()가 발생했습니다. 이 게시물에서는 이 두 가지 방법의 차이점을 자세히 살펴보겠습니다.

컨텍스트를 제공하기 위해 샘플 코드 조각을 고려해 보겠습니다.

void MyClass::my_method() {
    my_member.reserve(n_dim);
    for (int k = 0; k < n_dim; k++) my_member[k] = k;
}

이 코드의 의도는 다음과 같습니다. 지정된 용량(n_dim)으로 벡터를 만든 다음 벡터를 반복하여 해당 요소에 액세스하고 수정합니다. 그러나 이러한 목적에 Reserve()를 사용하는 것이 적절한지 의문이 생깁니다.

차이점 이해

std::Vector::reserve()는 이를 수용하기 위해 벡터에 메모리를 할당하도록 설계되었습니다. 지정된 수의 요소. 그러나 실제로 벡터의 크기를 수정하지는 않습니다. 벡터의 논리적 크기는 동일하게 유지됩니다. 즉, 현재 논리적 크기를 초과하는 요소에 액세스하려고 하면 동작이 정의되지 않습니다.

반면에 std::Vector::resize()는 둘 다 메모리를 할당하고 벡터의 크기를 수정합니다. 벡터의 논리적 크기를 지정된 값으로 설정합니다. 크기 조정의 결과로 생성된 추가 요소는 기본값(예: 정수의 경우 0)으로 초기화됩니다.

샘플 코드 적용

제시된 샘플 코드에서 std를 사용하여 std::벡터::resize() 대신 ::벡터::reserve()를 사용하면 정의되지 않은 동작이 발생할 수 있습니다. 코드에서는 Reserve()를 호출한 후 벡터의 크기가 n_dim이라고 가정하지만 그렇지 않습니다. 따라서 원래 벡터 크기보다 크거나 같은 k로 my_member[k]에 액세스하면 메모리 액세스 위반이나 기타 정의되지 않은 동작이 발생합니다.

결론

결론적으로, 올바르게 벡터의 요소에 액세스하고 수정하려면 std::벡터::reserve()와 std::벡터::resize()의 차이점을 이해하는 것이 중요합니다. Reserve()는 크기를 조정하지 않고 메모리를 할당하는 데 사용되는 반면, resize()는 메모리 할당과 벡터 크기를 모두 수정하여 새로 생성된 요소를 초기화하는 데 사용됩니다. 제공된 샘플 코드에서 std::Vector::resize()를 사용하여 메모리를 할당하고 벡터의 크기를 설정해야 해당 요소에 대한 적절한 액세스 및 수정이 가능합니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.