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>을 남겨 둔 듯 하다.)
여기서 보았을때 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>을 남겨 둔 듯 하다.)
'책 정리 > Effective STL' 카테고리의 다른 글
항목 23 : 연관 컨테이너 대신에 정렬된 vector를 쓰는 것이 좋을 때가 있다. (0) | 2008.07.22 |
---|---|
항목 22 : set과 multiset에 저장된 데이터 요소에 대해 키(key)를 바꾸는 일은 피하자. (1) | 2008.07.19 |
항목 21 : 연관 컨테이너용 비교 함수는 같은 값에 대해 false를 반환해야 한다. (0) | 2008.07.19 |
항목 20 : 포인터를 저장하는 연관 컨테이너에 대해서는 적합한 비교(비교함수) 타입을 정해주자 (0) | 2008.07.18 |
항목 19 : 상등 관계(equality)와 동등 관계(equivalence)의 차이를 파악하자 (0) | 2008.07.18 |
항목 17 : 쓸데없이 남은 용량은 "바꿔치기(swap) 묘수"를 써서 없애 버리자. (0) | 2008.07.17 |
항목 16 : 기존의 C API에 vector와 string을 넘기는 방법을 알아두자 (0) | 2008.07.17 |
항목 15 : 잊지 말자! string은 여러 가지 방식으로 구현되어 있다는 사실을... (0) | 2008.07.16 |
항목 14 : reserve는 필요 없이 메모리가 재할당되는 것을 막아 준다. (1) | 2008.07.16 |
항목 13 : 동적으로 할당한 배열보다는 vector와 string 이 낫다. (0) | 2008.07.15 |
최근댓글