проблема заключается в следующем: мне нужно создать растровое изображение (серию двоичных флагов) для хранения истинной / ложной информации о группе объектов; номер объекта не известен априори, поэтому я должен выделить достаточно флагов во время выполнения, возможно, при создании растрового изображения.
Дано max_num_elements
элементы, моя первая идея состояла в том, чтобы выделить массив ((num_elements/8)+1)*sizeof(char)
биты: так как char
длиной 8 бит, он может обрабатывать 8 двоичных флагов, поэтому я получаю минимальное число char
держать num_elements
флаги, с максимальной потерей памяти в 7 бит.
Реальная проблема заключается в проверке / установке флагов: я попытался сделать несколько битовых сдвигов для всего массива, а затем побитовых и получить флаг n как
flag_n = (flag_array>>n)&0d1
но если я правильно понял, операция сдвига не затронет весь массив, только первый элемент.
Как мне этого добиться?
std::vector<bool>
специализируется для достижения именно этого.
Это на самом деле проблема во многих случаях, поскольку доступ к элементу возвращает прокси-объект, а не bool&
Таким образом, он не совсем ведет себя как все остальные контейнеры, но, похоже, в вашем случае он соответствует тому, что вам нужно.
Других решений пока нет …