기본 Container별 Concepts


자주 쓰는 STL 컨테이너가 어떤 range concept를 만족하는지 빠르게 확인하기 위한 요약입니다.

빠른 표

컨테이너대표 range concept추가 메모
std::vector<T>random_access_range, contiguous_range, sized_rangevector<bool>contiguous_range 아님
std::deque<T>random_access_range, sized_range연속 메모리는 아님
std::list<T>bidirectional_range, sized_range연결 리스트
std::forward_list<T>forward_rangesize()가 없어 sized_range 아님
std::array<T, N>random_access_range, contiguous_range, sized_range정적 크기
std::stringrandom_access_range, contiguous_range, sized_range문자 시퀀스
std::map, std::setbidirectional_range, sized_range정렬 연관 컨테이너
std::unordered_map, std::unordered_setforward_range, sized_range해시 기반
std::span<T>contiguous_range, sized_range, view, borrowed_range비소유 뷰
std::string_viewcontiguous_range, sized_range, view, borrowed_range비소유 문자열 뷰

실전에서 기억할 포인트

  • ranges::sortrandom_access_range가 필요하므로 list에는 바로 쓸 수 없다.
  • 컨테이너 대부분은 view가 아니고, span이나 string_view 같은 비소유 타입만 view다.
  • 컨테이너가 borrowed_range인 경우는 드물다. 수명 문제를 항상 같이 봐야 한다.

셀프 체크

static_assert(std::ranges::random_access_range<std::vector<int>>);
static_assert(std::ranges::bidirectional_range<std::list<int>>);
static_assert(!std::ranges::sized_range<std::forward_list<int>>);
static_assert(std::ranges::borrowed_range<std::span<int>>);