std::vector

std::vector (동적 배열 컨테이너)

크기가 자동으로 조절되는 시퀀스 컨테이너예요. 연속적으로 저장된 원소들로, 크기 조절에도 매우 효율적이어요. 임의 접근이 O(1)이에요. C++의 가장 기본적인 동적 배열 타입이에요.

출처: cppreference

본문

<vector> 헤더에 정의돼 있고, 동적 배열 컨테이너예요.

template<
    class T,
    class Allocator = std::allocator<T>
> class vector;

C++17부터 pmr 별칭도 있어요: std::pmr::vector<T> = std::vector<T, std::pmr::polymorphic_allocator<T>>.

std::vector는 크기가 자동으로 조절되는 시퀀스 컨테이너예요. 크기 조절에도 매우 효율적으로, 원소 저장과 접근이 연속적이에요. 원소들이 연속적으로 저장되므로, 포인터 산술로 반복자를 사용할 수 있고 C 스타일 배열을 기대하는 함수에도 배열처럼 통과할 수 있어요(단 vector<bool>은 프록시라 제외).

벡터의 저장 공간은 자동으로 확장·축소되며, 용량(capacity)이 크기(size)와 별도로 관리돼요. push_back 등으로 원소를 추가할 때 용량이 부족하면 더 큰 메모리를 새로 할당하고 기존 원소를 이동·복사한 뒤 이전 공간을 해제해요. 이 재할당은 일반적으로 상각(amortized) 상수 시간이 되도록 용량을 (통상) 지수적으로 늘려요.

vectorContainer, AllocatorAwareContainer, SequenceContainer, ReversibleContainer, ContiguousContainer(C++17) 요구사항을 만족해요.

멤버 타입

value_type = T, allocator_type = Allocator, size_type(보통 std::size_t), difference_type(보통 std::ptrdiff_t), reference = T&, const_reference = const T&, pointer, const_pointer, iterator(C++20부터 LegacyRandomAccessIterator·contiguous_iterator·ConstexprIterator), const_iterator, reverse_iterator, const_reverse_iterator.

멤버 함수

  • 생성자, 소멸자, operator=, assign, assign_range(C++23), get_allocator.
  • 원소 접근: at, operator[], front, back, data.
  • 반복자: begin/cbegin, end/cend, rbegin/crbegin, rend/crend.
  • 용량: empty, size, max_size, reserve, capacity, shrink_to_fit.
  • 수정자: clear, insert, insert_range(C++23), emplace, erase, push_back, emplace_back, append_range(C++23), pop_back, resize, swap.

비멤버 함수

  • operator==, !=, <, <=, >, >=, <=>: 두 vector 사전식 비교.
  • std::swap(std::vector): std::swap 특수화.
  • erase, erase_if (C++20): 특정 기준을 만족하는 원소 모두 제거.

C++17부터 추론 가이드가 있어요. vector는 동적 크기 배열이 필요한 대부분의 상황에서 기본 선택이에요. 임의 접근이 빠르고(인덱스로 O(1)), 연속 메모리라 캐시 효율도 좋아요. 다만 컨테이너 중간 삽입·삭제는 O(n)이라, 잦은 중간 조작이 필요하면 list·deque가 더 나을 수 있어요.

더 알아보기 (Learn more)

cppreference