управление памятью — растровое изображение C ++ для хранения двоичных флагов

проблема заключается в следующем: мне нужно создать растровое изображение (серию двоичных флагов) для хранения истинной / ложной информации о группе объектов; номер объекта не известен априори, поэтому я должен выделить достаточно флагов во время выполнения, возможно, при создании растрового изображения.

Дано max_num_elements элементы, моя первая идея состояла в том, чтобы выделить массив ((num_elements/8)+1)*sizeof(char) биты: так как char длиной 8 бит, он может обрабатывать 8 двоичных флагов, поэтому я получаю минимальное число charдержать num_elements флаги, с максимальной потерей памяти в 7 бит.

Реальная проблема заключается в проверке / установке флагов: я попытался сделать несколько битовых сдвигов для всего массива, а затем побитовых и получить флаг n как

flag_n = (flag_array>>n)&0d1

но если я правильно понял, операция сдвига не затронет весь массив, только первый элемент.

Как мне этого добиться?

2

Решение

std::vector<bool> специализируется для достижения именно этого.

Это на самом деле проблема во многих случаях, поскольку доступ к элементу возвращает прокси-объект, а не bool&Таким образом, он не совсем ведет себя как все остальные контейнеры, но, похоже, в вашем случае он соответствует тому, что вам нужно.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]