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