문제는 다음과 같습니다. 오브젝트 묶음에 대한 참/거짓 정보를 유지하려면 비트 맵 (일련의 바이너리 플래그)을 만들어야합니다. 객체의 수는 선험적으로 알려지지 않기 때문에 비트 맵 생성 중에 런타임에 충분한 플래그를 할당해야합니다.바이너리 플래그를 유지하는 C++ 비트 맵
을 감안할 때 max_num_elements
요소는, 내 첫 번째 생각은 ((num_elements/8)+1)*sizeof(char)
비트의 배열을 할당하는 것이었다하십시오 char
는 8 비트이기 때문에 길이가 8 개 진 플래그를 처리 할 수있는, 그래서 최대로, char
의의 minimun 수 num_elements
플래그를 잡아 얻을 7bits의 메모리 낭비.
진짜 문제는/체크 플래그를 설정하는 것입니다 : 내가 좋아하는 N
flag_n = (flag_array>>n)&0d1
을 플래그를 얻을 수있는 비트에 의해 다음 전체 배열에 약간의 bitshifting을 할 문질러서하지만 제대로 이해되면, 이동 작업은 첫 번째 요소 인 전체 배열에 영향을 미치지 않습니다.
어떻게하면됩니까?
내가 뭔가를 놓치지 않는 한, 왜 비트 맵 대신 오히려 길지 않은가? 첫 번째 비트는 일부 속성에 대해 참/거짓, 다른 속성에 두 번째 비트 등을 포함합니다. – Eugene