본문 바로가기
프로그래밍언어/C++

[c++]std::vector의 size와 capacity

by 연어바케트 2020. 3. 18.
반응형

vector를 사용하다 보니 vector초기화시 아무 생각없이 clear()를 하고 나면

 

vector 원소만 초기화 시켜면 된다는 생각에 그냥 넘어 가곤 했는데

 

메모리를 생각해야 할 상황이되니까 clear()만으로는

 

clear() size는 0이 될지 모르지만 vector의 메모리 할당 크기를 나타내는

 

capacity는 그대로 유지된다는 것을 알게 되었다.

 

 

위와 같이 처음은 size와 capacity가 같지만 clear() 후

 

size는 0으로 변경되었으나 capacity는 결과 값이 그대로 유지됨을 볼 수 있다.

그래서 capacity 0으로 변경해 주는 방법이 어떤게 있는 지 검색 해보니

 

vector를 만들고 swap()을 해서 capacity를 0으로 만들어 주는 방법이 있었다

vTemp를 만들어 swap을 해준 결과값을 보면

 

size와 capacity 까지 초기화 되는 것을 볼 수 있다

 

하지만 이 방법외 없는지 검색을 하다 보니

 

shrink_to_fit()이라는 함수를 알게 되었다

 

clear() 후 capacity는 그대로지만 shrink_to_fit()하고 난 뒤

 

size() 값과 capacity 값을 맞춰 주는 역할은 하는 것

결과값을 보면 알 수 있을 듯 clear()시 size()는 0이 되고 capacity는 그대로 유지되지만

 

shrink_to_fit()을 통해 size의 값과 capacity 값을 동일한 값으로

 

변경되는 것을 확인 할 수 있다

 

또한 capacity는 원소가 쌓이는 만큼 늘어나는게 아니라 나름의 정책에 따라

 

capacity 값이 늘어 난다는 것을 알게 되었는데

 

숫자 200까지 push_back()하는 상황에서 capacity 값이 size크기 만큼 늘어난 것이 아닌

 

그 이상으로 capacity가 늘어 난다는 것을 알 수 있다.

반응형

댓글