더북(TheBook)

2.3.7 vector<bool> 컨테이너

vector<bool>vector<T> 템플릿의 특수화로 bool 타입 원소들에 대해 메모리 사용이 더 최적화되어 있다. vector<bool>의 구현은 bool 원소를 1비트로 저장한다. 특수화가 없다면 vectorbool 원소는 1바이트로 저장되거나 컴파일러의 구현에 따라 1바이트 이상을 차지할 수도 있다. bool 값으로 된 순차열이 반드시 연속 메모리에 저장될 필요는 없으므로 data() 함수 멤버는 이용할 수 없다. vector<bool> 특수화에서 일부 함수 멤버는 일반 템플릿 인스턴스와는 살짝 다르게 동작한다. bool 값들은 비트로 패킹되어 있으므로 직접 접근할 수 없으며 front()back()의 반환값은 bool& 참조가 아니라 순차열에서 처음과 마지막 값을 표현하는 프록시 객체에 대한 참조가 된다.

크기가 고정된 bool 값을 다뤄야 한다면 bitset 헤더에 정의된 bitset<N> 클래스 템플릿이 vector<bool>보다 더 나은 선택이다. bitset<N> 템플릿 인수에는 비트의 개수를 지정한다. bitset은 컨테이너가 아니다. 예를 들어 반복자는 없지만 bitset 인스턴스는 vector<bool>에는 없는 다양한 bitset 연산을 제공한다. vector<bool>이나 bitset<N>은 조금 특수한 용도이므로 더 자세히 다루지는 않을 것이다.

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