2008. 7. 17. 10:37 책 정리/Effective STL
vector에, bool을 넣어 사용하지 말라는 뜻으로 이해 하고 넘어가도 되는 장이지만, 왜 그런지 알아둘 필요가 있기에 간략한 설명을 한다. 설명에 들어가기 앞서, 코드를 포함하여, 설명을 한다.

여기서 보았을때 bool 은 정상적으로 작동이 되지 않을것이며, 맨 끝에 라인에서 컴파일 타임 에러가 날 것이다. 그 이뉴는 vector 내부에, bool 8개를 1Byte에 저장하여, 작동되도록 만들었기 때문에, 주소값 반환시 다른형이라, 반환이 될수가 없다.

그렇기 때문에 bool을 담고 싶다면 크게 두가지 방법이 있다.
1. deque 에 담는다.(deque는 bool 자체 그대로 넣을수 있다)
2. bitset 을 이용한다.(vector 에 넣을것이라면 bitset 이 더 편하다고 한다)

저자는 2번째 방법을 추천해 주고 있고, vector<bool>은 컨테이너가 아니라고 필자는 말하고 이번 항목이 맞쳤다. 주소값만 가지고 오는것이 아니라면, 써도 무방할듯 하지만 vector의 장점은 배열과 같은 식으로 사용한다는데에 있기에, 이 방법이 나중에 독이 될 수 있다고 경고하고 있따.


부수적인 이야기
C++ 표준화 위원회에서 프록시(Proxy)객체를 사용한다면 보다 좋은 구조가 나올수 있다고 생각했었고, 그 본보기로 vertor<bool>을 만들기로 결정했다고 한다. 하지만 프록시(Proxy)객체가 요구사항을 모두 만족시킬수 없었고, 중단을 했다고 한다.(.. 아마도 본보기형태로 vector<bool>을 남겨 둔 듯 하다.)
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요