차이점 이해: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!