더북(TheBook)

이 코드를 실행해보면 초기화 리스트에서 결정된 sizecapacity, 즉 여기서는 14를 보여준다. 그러나 push_back() 함수로 원소 하나를 추가하고 sizecapacity를 다시 출력해보면 size는 15가 되고, capacity는 28이 될 것이다. sizecapacity가 같을 때 capacity의 증가 크기는 구현된 알고리즘에 따라 다를 수 있다. 일부 구현체는 capacity를 2배씩 증가시킨다.

vectorsizecapacity를 변수에 저장하고 싶다면 어떻게 할까. vector<T> 객체의 sizecapacity 타입은 vector<T>::size_type이고, size_type은 컴파일러가 vector<T> 클래스 템플릿을 생성할 때 vector<T> 클래스 내부에서 정의된다. 따라서 primes 벡터의 size 값은 vector<size_t>::size_type 타입이 된다. 이런 타입을 일일이 걱정하지 않고 싶다면 변수를 정의할 때 auto 키워드를 사용하자.

auto nElements = primes.size();        // 원소들의 개수를 저장한다

기억하자. auto에는 =만 써야 하고 초기화 리스트를 쓰면 안 된다. 그렇지 않으면 타입을 올바르게 결정할 수 없게 된다. size를 저장하는 흔한 이유는 vector의 원소들을 인덱스로 반복(iterate)하고 싶을 때다. vector에는 범위 기반 for 루프도 사용할 수 있다.

for(auto& prime : primes)
  prime *= 2;        // 각 원소의 값을 2배한다
 

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