C++ Vector ➕

장재근·2025년 6월 7일

개인 공부용

목록 보기
23/31

Vector

 새로운 과제를 풀기 위해 벡터를 더 심도 있게 들어가기로 했습니다.

 벡터는 동적 배열입니다. 원소를 추가할 때, 초기에 할당 받은 용량(capacity)을 넘길 경우 새로운 메모리 공간을 할당받습니다. 이때 기존의 벡터 배열 데이터를 모두 복사하기 때문에 O(size) 만큼의 시간이 걸립니다. 따라서, 재할당이 일어나는 횟수가 많아질수록 비효율적이기 때문에 재할당이 일어나는 횟수를 줄여야합니다.


Size, Capacity의 차이

✓ size

vec.size()
벡터의 사이즈 = 벡터 배열에 담긴 원소의 개수

✓ capacity

vec.capacity()
※ capacity = 할당된 메모리 크기에 원소 타입의 크기를 나눈 값

  • ex) 40byte를 할당 받은 int(4byte)형 원소를 가지는 벡터 vec
    vec.capacity() = 40 ÷ 4 = 10

‼️벡터의 원소를 제거해도 용량은 줄지 않습니다.
초기화 되지 않은 벡터 사용 시 주의
이를 방지하기 위해 NULL, 반복자 활용 또는 capacity()가 아닌 size()를 이용


vector의 공간 할당

vector<type> vec; 초기화 X, 공간 할당 X 벡터 선언
vector<type> vec(n); 초기화 NULL, 크기가 n인 벡터 선언
vector<type> vec(n, a); 초기화 a, 크키가 n인 벡터 선언


vector의 공간 재할당

✓ reserve

vec.reserve(n)

if (vec.capacity() < n) { 벡터의 용량을 n으로 재할당; }
  • '추가' 개념, 벡터의 size는 변함 없음
  • 새로운 메모리 할당, 데이터 복사
  • 원소 복사 생성자 → 기존 원소 소멸자

✓ resize

vec.resize(n)

if (vec.size() < n) 
{ 
	.begin() + n 부터 원소 삭제(소멸자 실행);
}

else if (vec.size() > n) 
{ 
	.end() 부터 원소 삽입(생성자 실행)
    if (vec.capacity() < n)
    {
		벡터의 용량을 n으로 재할당;  //reserve(n)
    }
}
  • '변경' 개념, 벡터의 size 변경 가능
  • 새로운 메모리 할당 가능, 데이터 복사
  • 원소 생성 → 원소 복사 생성자 → 기존 원소 소멸자
profile
계속 화이팅입니다~

0개의 댓글