Я работаю с определенным пользователем количеством битов (я держу трехмерный массив битов, поэтому размер увеличивается кубически - предположим, не менее 512 бит), и мне нужно отразить их каждый в отдельности.Прямо сейчас, просто на компьютере, я использую тип bool
, так как память не проблема.Я планирую перенести код на микроконтроллер в будущем, поэтому могут возникнуть проблемы с вычислительной мощностью и требованиями к памяти.Хотя сейчас мне нужна скорость.
Затем я нашел объект std::bitset
из C ++ STL , но не могу определить размер набора битов во время выполнения.Затем я обнаружил, что std::vector<byte>
имеет специальный инициализатор для хранения их в виде битов (вместо целых байтов или 4 байтов), но затем нашел этот раздел в Википедии:
Стандартная библиотека определяет специализацию шаблона vector
для bool
.Описание этой специализации указывает, что реализация должна упаковать элементы так, чтобы каждый bool
использовал только один бит памяти.Это широко считается ошибкой.[...] Существует общий консенсус между Комитетом по стандартизации C ++ и Рабочей группой по библиотекам, что vector<bool>
должен быть признан устаревшим и впоследствии удален из стандартной библиотеки, в то время как функциональность будет вновь введена под другим именем.
Теперь вы, вероятно, видите мое желание использовать vector<bool>
объект, но после прочтения я подумываю использовать что-то еще.Единственная проблема в том, что я не уверен, что использовать.Мне было любопытно, почему они утверждают, что функциональность должна быть повторно введена (хотя и под другим именем).
Итак, мой вопрос, будет ли использование vector<bool>
объектовприемлемо (если они являются частью STL)?Являются ли они частью стандарта C ++?
Если их использование неприемлемо, есть ли приемлемое альтернативное решение (вне меня я определяю специальный контейнер сам)?У меня есть несколько идей, но мне просто интересно, есть ли у кого-нибудь лучшее решение.Кроме того, я хотел бы избежать использования больших библиотек (опять же, я хочу в конечном итоге перенести этот код в микроконтроллер).