Как мы все, наверное, знаем C ++ 98 vector<bool>
специализация хранит логические значения как биты, а не как переменные типа bool. vector<bool>
элементы не адресуемы, потому что в C ++ нет указателей и ссылок на биты, есть ли обходной путь для этого, какие-либо очевидные подводные камни (что я, кажется, не замечаю) и практично ли даже попытаться сделать это?
vector<bool>
элементы адресации, как и любой другой vector
элементы, например с operator []
, Однако операции будут выполняться медленнее из-за сжатия памяти.
Может быть, более быстрая реализация будет использовать вашу собственную реализацию памяти и использовать двоичные сдвиги для обращения к конкретному логическому значению.
Также альтернативой будет использование простого массива в местах, где это уместно. Помните, что вы можете выделить его динамически, используя new
оператор.
РЕДАКТИРОВАТЬ Альтернативные реализации могут быть найдены, например, в эта тема.
Вместо ссылок / указателей на биты, vector<bool>
использует объекты-оболочки с перегруженными операторами, которые ведут себя (в большинстве случаев) как ссылки / указатели на логические значения.