공부/C++

Vector resize, reserve의 차이점

셩잇님 2022. 12. 21. 22:48
반응형

 

 

C++ 표준 템플릿 라이브러리(STL)에서 Vector 클래스는 새로운 요소들을 추가 및 제거할 때 동적으로 크기를 조절하는 시퀸스 컨테이너입니다.

 

이 중 벡터는 크기를 변경할 수 있는 두 가지 멤버 함수를 제공합니다. 하나는 resize()이며, 다른 하나는 reserve()입니다.

 

1. resize()

resize()는 벡터의 사이즈(=크기, size)를 사용자가 지정한 사이즈(=크기, size)로 변경합니다. 만약 새 사이즈가 현재 크기보다 크면 새롭게 추가된 값들을 기본값으로 채우며, 새 사이즈가 현재 사이즈보다 작으면 기존 벡터에서 가지고 있던 값 중 초과된 인자값들은 제거합니다. 말로써 이해하기 어려울 경우, 다음 예제를 확인해보세요.

#include <vector>
#include <iostream>

int main()
{
    // 사이즈가 3인 벡터 설정
    std::vector<int> v = {1, 2, 3};
    

    // 현재 벡터의 사이즈 출력
    // Output: v.size() = 3
    std::cout << "v.size() = " << v.size() << std::endl;  
    

    // 벡터의 사이즈를 현재 크기보다 크게 설정 및 사이즈 출력
    // Output: v.size() = 5
    v.resize(5);
    std::cout << "v.size() = " << v.size() << std::endl;  
    

    // 벡터 내부 요소들을 출력 (새 요소들은 기본값인 0으로 채워진다)
    // Output: 1 2 3 0 0
    for (int x : v)
        std::cout << x << " ";  
        

    // 벡터의 사이즈를 현재 크기보다 작게 설정 및 사이즈 출력
    // Output: v.size() = 2
    v.resize(2);
    std::cout << "v.size() = " << v.size() << std::endl;
    

    // 벡터 내부 요소들을 출력
    // Output: 1 2
    for (int x : v)
        std::cout << x << " ";  
}

 

2. reserve()

reserve()는 벡터의 용량(=capacity)은 늘리지만, 사이즈(=크기, size)는 변경하지 않습니다. 나중에 벡터에 더 많은 인자 값들을 추가할 것임을 알고 있을 때, 불필요한 재 할당을 방지하여 벡터가 가진 성능을 최적화하는데 사용됩니다. 마찬 가지로 아래 예시를 참고하세요.

#include <vector>
#include <iostream>

int main()
{
	// 사이즈가 3인 벡터 설정
    std::vector<int> v = {1, 2, 3};
    

	// 현재 벡터의 사이즈 및 용량 출력
    std::cout << "v.size() = " << v.size() << std::endl;  
    // Output: v.size() = 3
    std::cout << "v.capacity() = " << v.capacity() << std::endl;  
    // Output: v.capacity() = 3
    

	// reserve()를 함수를 사용 한 후 현재 벡터의 사이즈 및 용량 출력
    v.reserve(5);
    std::cout << "v.size() = " << v.size() << std::endl;
    // Output: v.size() = 3
    std::cout << "v.capacity() = " << v.capacity() << std::endl;  
    // Output: v.capacity() = 5
    

	// push_back()을 통해 사이즈를 채워주고 난 후 현재 벡터의 사이즈 및 용량 출력
    v.push_back(4);
    v.push_back(5);
    std::cout << "v.size() = " << v.size() << std::endl; 
    // Output: v.size() = 5
    std::cout << "v.capacity() = " << v.capacity() << std::endl; 
    // Output: v.capacity() = 5
}

 

요약하면, resize()는 벡터의 사이즈(=크기, size) 수를 변경하고 reserve()는 벡터의 용량(=capacity)를 변경합니다. resize() 함수를 이용하면 성능 면에서 reserve()보다 비싼 벡터의 메모리를 재 할당하는 과정이 필요한 반면, reserve() 함수는 새 용량(=capacity)이 부족한 경우가 아니라면, 벡터의 메모리를 재 할당을 일으키지 않습니다.

 

 

 

반응형