std::vector<bool>

std::vector (공간 효율적인 bool 전용 벡터)

bool 타입을 위한 std::vector의 공간 효율적인 특수화예요. 각 원소가 sizeof(bool) 바이트 대신 단일 비트를 차지하도록 압축되는 최적화가 가능해요.

출처: cppreference

본문

<vector> 헤더에 정의돼 있고, std::vectorbool 특수화예요.

template<
    class Allocator
> class vector<bool, Allocator>;

std::vector<bool>bool 타입을 위한 std::vector의 (다소) 공간 효율적 특수화예요. std::vector<bool>이 공간 효율적으로 만들어지는 방식(최적화되는지 여부 포함)은 구현 정의예요. 한 가지 잠재적 최적화는 원소를 압축해 각 원소가 sizeof(bool) 바이트 대신 단일 비트를 차지하게 하는 거예요.

std::vector<bool>std::vector와 비슷하게 동작하지만, 공간 효율을 위해 다음과 같이 달라요.

  • 원소를 반드시 연속 배열로 저장하지는 않아요.
  • 클래스 std::vector<bool>::reference를 개별 비트에 접근하는 방법으로 노출해요. 특히 operator[]가 이 클래스의 객체를 값으로 반환해요.
  • 비트 값을 구성할 때 std::allocator_traits::construct를 사용하지 않아요.
  • 같은 컨테이너 안의 서로 다른 원소가 서로 다른 스레드에서 동시에 수정될 수 있다는 것을 보장하지 않아요.

멤버 타입

  • value_type = bool, allocator_type = Allocator, size_type·difference_type·pointer·const_pointer·iterator·const_iterator는 구현 정의.
  • reference: 단일 bool에 대한 참조를 나타내는 프록시 클래스 (class).
  • const_reference = bool.
  • reverse_iterator = std::reverse_iterator<iterator>, const_reverse_iterator = std::reverse_iterator<const_iterator>.

멤버 함수

생성자, 소멸자, operator=, assign, assign_range(C++23), get_allocator, at, operator[], front, back, begin/cbegin, end/cend, rbegin/crbegin, rend/crend, empty, size, max_size, reserve, shrink_to_fit, clear, insert, emplace, erase, push_back, emplace_back, pop_back, resize, swap, 그리고 std::vector<bool>에 특화된 flip(모든 비트 반전) 멤버가 있어요.

비멤버 함수

operator==, operator!=, std::swap(std::vector<bool>) 등이 있어요. std::vector<bool>::reference 덕분에 프록시 객체를 통해 개별 비트를 읽고 쓸 수 있어요. 다만 참조가 프록시 타입이므로 일반적인 bool 참조와 미묘하게 다를 수 있다는 점에 주의해야 해요.

더 알아보기 (Learn more)

cppreference