Как работает вектор & lt; bool & gt; иметь дело со ссылками и итераторами?

Как мы все, наверное, знаем C ++ 98 vector<bool> специализация хранит логические значения как биты, а не как переменные типа bool. vector<bool>элементы не адресуемы, потому что в C ++ нет указателей и ссылок на биты, есть ли обходной путь для этого, какие-либо очевидные подводные камни (что я, кажется, не замечаю) и практично ли даже попытаться сделать это?

5

Решение

vector<bool>элементы адресации, как и любой другой vectorэлементы, например с operator [], Однако операции будут выполняться медленнее из-за сжатия памяти.

Может быть, более быстрая реализация будет использовать вашу собственную реализацию памяти и использовать двоичные сдвиги для обращения к конкретному логическому значению.

Также альтернативой будет использование простого массива в местах, где это уместно. Помните, что вы можете выделить его динамически, используя new оператор.

РЕДАКТИРОВАТЬ Альтернативные реализации могут быть найдены, например, в эта тема.

2

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

Вместо ссылок / указателей на биты, vector<bool> использует объекты-оболочки с перегруженными операторами, которые ведут себя (в большинстве случаев) как ссылки / указатели на логические значения.

1