더북(TheBook)

2.3.1 vector<T> 컨테이너 생성하기

double 타입의 값을 저장하는 vector 컨테이너를 생성해보자.

std::vector<double> values;

이렇게 선언하면 원소가 하나도 없고, 원소를 위해 할당된 공간도 없는 상태이므로 첫 번째 데이터를 추가할 때 메모리가 자동으로 할당된다. 컨테이너 객체의 reserve()를 호출해서 용량(capacity)을 늘릴 수 있다.

values.reserve(20);         // 20개까지 저장할 수 있는 메모리를 할당

이 코드는 컨테이너가 최소 20개의 원소를 수용할 수 있는 메모리를 할당해준다. 현재 용량이 20보다 크거나 같다면 이 코드는 아무 작업도 하지 않는다. reserve()를 호출한다고 원소들이 생성되는 건 아니다. 이 시점까지는 여전히 values 컨테이너에 원소가 하나도 없다. 20개까지 추가된 이후에 더 많은 메모리가 할당될 것이다. reserve() 호출은 컨테이너에 이미 있는 원소에는 어떤 영향도 주지 않는다. 그러나 reserve() 호출로 할당된 메모리가 증가했다면 시작 반복자나 끝 반복자처럼 이미 생성한 반복자들은 무효화(invalidated)되므로 이들 반복자는 반드시 다시 생성해야 한다. 이는 컨테이너의 크기를 늘리는 과정에서 기존 원소들이 새로운 메모리 위치로 복사되거나 이동될 수 있기 때문이다.

vector 생성에 쓸 수 있는 다른 옵션으로는 초기화 리스트를 사용해 초깃값을 지정하는 것과 원소들의 개수를 미리 지정하는 것이 있다.

std::vector<unsigned int> primes {2u, 3u, 5u, 7u, 11u, 13u, 17u, 19u};

primes vector 컨테이너는 생성될 때 초기화 리스트로 원소 8개의 초깃값을 지정한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.