Как мы все, вероятно, знаем, специализация C++ 98 vector<bool>
хранит логические значения как биты, а не как логические переменные. Элементы vector<bool>
не являются адресуемыми, потому что C++ не имеет указателей и ссылок на биты, есть ли обходной путь, какие-либо очевидные ловушки (на которые я, кажется, не обращаю внимания) и практично ли даже попробовать так и сделать?
Как vector‹bool› работает со ссылками и итераторами?
Ответы (2)
Элементы vector<bool>
адресуются так же, как и любые другие элементы vector
, например. с operator []
. Однако операции будут выполняться медленнее из-за сжатия памяти.
Возможно, более быстрая реализация будет использовать вашу собственную реализацию в памяти и использовать двоичные сдвиги для обращения к конкретному логическому значению.
Также альтернативой будет использование простого массива в местах, где это уместно. Помните, что вы можете выделить его динамически, используя оператор new
.
EDIT Могут быть найдены альтернативные реализации, например. в этой теме.
std::vector<bool>::reference
в качестве прокси-ссылки. См. пример на liveworkspace.org/code/1gNZ5O$0.
- person Johnsyweb; 30.12.2012
bool
- person Boris Strandjev; 30.12.2012
Вместо ссылок/указателей на биты vector<bool>
использует объекты-оболочки с перегруженными операторами, которые ведут себя (в большинстве случаев) как ссылки/указатели на логические значения.