Хороший выбор зависит от того, как вы собираетесь использовать бит.
std::bitset<N>
имеет фиксированный размер. Visual C++ 10.0 не соответствует требованиям. конструкторам; в общем, вы должны предоставить обходной путь. Это было, как это ни парадоксально, из-за того, что Microsoft считала ошибкой - они ввели конструктор, принимающий аргумент int
, насколько я помню.
std::vector<bool>
оптимизирован практически так же, как std::bitset
. Стоимость: индексирование напрямую не предоставляет ссылку (нет ссылок на отдельные биты в C++), но вместо этого возвращает прокси-объект - это не то, что вы замечаете, пока не попытаетесь использовать его в качестве ссылки. Преимущество: минимальное хранение, и вектор может быть изменен по мере необходимости.
Просто используя, например, unsigned
также является вариантом, если вы собираетесь иметь дело с небольшим количеством бит (на практике 32 или менее, хотя формальная гарантия составляет всего 16 бит).
Идентификаторы ALL UPPERCASE по умолчанию (кроме Microsoft) зарезервированы для макросов, чтобы уменьшить вероятность столкновений имен. Поэтому неплохо не использовать идентификаторы ALL UPPERCASE для чего-либо еще, кроме макросов. И всегда использовать ВСЕ идентификаторы UPPERCASE для макросов (это также облегчает их распознавание).
Приветствия & НТН.,
Процитирую страницу cplusplus.com на BitSet, «Класс очень похож на обычный массив, но для оптимизации распределения пространства». Если ваш ints равен 4 байтам, биты используют в 32 раза меньше места. – AlcubierreDrive
Ваша структура 'BIT' будет выровнена так или иначе (по крайней мере) на один байт. – Archie
@Jon, сообщение это как ответ. (Это хороший момент.) –