공부/C++ \C#

vector의 size와 capacity

Lero God 2018. 7. 4. 10:57

벡터의 reserve와 resize의 차이에 대해서 이해하기 위해선 size와 capacity에 대해 알고 있어야 합니다. 





위 그림을 보면 capacity는 벡터의 요소(element)들을 담을 수 있는 메모리가 할당되어 있는 공간의 용량이고, size는 실제 유효한 요소(element)들의 갯수입니다. 


reserve 키워드는 벡터의 capacity 크기를 정할 수 있게 해줍니다. push_back 함수를 통해 새로운 요소를 추가할 때 size가 capacity보다 작으면 그냥 맨뒤의 공간에 요소를 복사해 넣고 size의 크기만 늘어납니다. 하지만 size랑 capacity의 크기가 같으면 벡터의 메모리를 재할당 해줘야 합니다. 먼저 기존 capacity보다 더 많은 메모리를 새로운 연속된 공간에 할당하고 기존의 모든 요소들을 복사합니다. 복사 후에 기존 정보는 지웁니다. 즉, reserve 키워드를 사용해서 할당한 메모리 용량을 초과하지 않는 한 재할당은 일어나지 않습니다. 


  • 주의할 점은 동적으로 컨테이너의 크기가 확장/축소되는 것이 편하기는 하나, 확장시의 재할당은 비용이 꽤 큽니다. 그래서 capacity를 확장 시켜줄 수 있는 적절한 크기의 reserve로 인한 메모리 확보가 중요합니다.


resize는 지정한 수 n 만큼 요소를 만듭니다. 이 때 기본값을 설정하지 않으면 default 생성자에 의해 모든 요소가 초기화됩니다. n이 기존 크기보다 더 작으면 n보다 큰 요소들은 버려집니다. n이 기존 크기보다 크면 기존 요소들 뒤에 새로운 요소들이 추가됩니다. n이 capacity 보다 크면 할당된 모든 메모리가 재할당이 됩니다.




참고 :  http://www.cplusplus.com/reference/vector/vector/resize/

'공부 > C++ \C#' 카테고리의 다른 글

C++ 프로그래밍 : 런타임 타입 정보(Runtime Type Information)  (0) 2020.06.03
인라인 (Inline)  (0) 2018.08.08
레퍼런스와 포인터의 차이  (0) 2018.05.15
사용되지 않음 #pragma deprecated  (0) 2018.05.11
volatile 키워드  (0) 2018.05.11