kwan's note

[C++] STL vector 의 size와 capacity, resize 와 reserve 본문

Computer Programming/c++ programming

[C++] STL vector 의 size와 capacity, resize 와 reserve

kwan's note 2022. 4. 1. 01:36
반응형

본 강의는 udemy pocu 강의를 듣고 작성하였습니다.

https://www.udemy.com/course/cpp-unmanaged-programming-by-pocu/

 

c++ STL 에서 가장 많이쓰이는 컨테이너중 하나로 다양한 데이터를 저장할 수 있는 클래스 입니다.

 

vector는 다양한 데이터를 담을 수 있고 용량을 조절해 주기 때문에 기존 array 처럼 처음 선언한 크기보다 증가해도 사용할 수 있고 list와 다르게 연속된 공간에 위치하기 때문에 index로 접근할때도 빠르게 접근할 수 있습니다.

 

위와 같은 특성을 가지기 위해서는 size 뿐 아니라 capacity가 필요합니다.

size는 실제 데이터가 들어가있는 공간의 크기이고 capacity는 해당 vector에 할당된 용량입니다.

만약 size가 capacity에 도달하게 된다면 heap 공간에서 더 큰 용량을 찾아 capacity를 늘려 줍니다.

따라서 resize와 reserve는 전혀 다른 동작이 되는데

resize는 size의 크기를 조절하고 초기화 (기본값은 0)합니다.

따라서 현재보다 큰 사이즈로 resize한 경우 이전 size 다음 공간은 0으로 초기화 하게 됩니다.

만약 현재의 capacity를 초과하는 resize경우 해당 크기만큼 capacity를 늘려줍니다.

또한 만약 현재보다 작은 사이즈로 resize한 경우에는 그만큼 size를 줄이게 됩니다.

 

reserve는 단순히 capacity를 늘려주는것으로 현재 capacity보다 작으면 아무것도 하지 않고

현재보다 크게 설정한다면 해당 크기만큼 capacity를 할당해 줍니다.

 

따라서 어떤 vector를 사용할때 예상되는 사용크기를 reserve 한다면 빈번한 재할당으로 인한 성능저하/메모리 단편화등의 부작용을 어느정도 줄일 수 있습니다. 하지만 array와 다르게 부족하다면 재할당을 해주므로 최대로 사용할 필요는 없습니다.(낭비 최소화를 위해)

반응형

'Computer Programming > c++ programming' 카테고리의 다른 글

메모리 관리와 스마트 포인터  (0) 2022.07.18
[C++] STL std::map의 사용과 속도  (0) 2022.04.02
C++ Static  (0) 2022.03.30
[링커] 정적 링킹과 동적 링킹  (0) 2022.03.30