관리 메뉴

有希

C++/STL/Vector 동작 원리 본문

프로그래밍/C++

C++/STL/Vector 동작 원리

有希. 2022. 1. 31. 18:28

동적 배열을 통해서 구현된다 -> 배열의 크기를 유동적으로 조절한다


1. 쓸 만큼보다 더 많이 메모리를 할당한다.

2. 여유분까지 다 썼으면 메모리 증설. 책에서는 2배라고 읽었었는데, VS에서는 1.5배로 증설해주고 있다.
증설 과정: 1.5배 사이즈의 배열을 하나 더 만들고->기존 배열의 데이터를 복사->기존 배열은 삭제한다.


vector<int> v;

v.size() = 실제 사용 데이터 개수
v.capacity() = 여유분을 포함한 최대 개수

v.resize(int) = size를 조정한다. capacity가 모자라면 capacity도 늘린다.
vector<int> v(1000, 0); //resize 1000 하고 데이터 들을 0으로 초기화 한 것과 같은 선언
vector<int> v2 = v; //size capacity data들이 모두 복사됨

v.clear() = size를 0으로 초기화  한다.

vector<int>().swap(v); = v벡터의 size와 capacity를 0으로 초기화 한다. 꼼수임.
//웬만하면 한 번 capacity가 늘어났다면 해당 capacity까지 다시 데이터를 채워서 사용할 확률이
//존재하기 때문에 초기화 하지 않는게 나을수도

resize를 해주는 이유는, 미리 원하는 사이즈를 잡아두지 않았을 때 우리가 데이터를 채움에 따라서 데이터를 복사하는 비용이 계속해서 발생하기 때문에 성능에 영향을 끼친다.

'프로그래밍 > C++' 카테고리의 다른 글

std::map(set) insert 정확하게 사용하기  (0) 2022.08.07
C++/캐스팅(Casting)  (0) 2022.01.29
C++/클래스 사이의 타입 변환  (0) 2022.01.29
C++/malloc(free) vs new(delete)  (0) 2022.01.28
C++/메모리 구조  (0) 2022.01.28