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가 늘어 난다는 것을 알 수 있다.
'프로그래밍언어 > C++' 카테고리의 다른 글
[c++] typedef 란? 사용법 (0) | 2021.04.19 |
---|---|
[c++] chrono 시간 측정 예제 (0) | 2021.01.17 |
[C++]namespace(이름공간) 사용법 (0) | 2020.12.06 |
[C++] zip/unzip라이브러리 이용, 압축 해제 (0) | 2020.07.21 |
[c++]error c2668 'pow' 오버로드된 함수에 대한 호출이 모호합니다 (0) | 2020.07.14 |
댓글