C++ вектор передачи битов в функцию

Я хочу реализовать алгоритм на C++, которому нужен динамически назначаемый огромный вектор битов (512x18 000 000 бит - у меня 16 ГБ ОЗУ).

а) это отлично работает

int nofBits=....(function read from db);
vector < bitset <nofBits> > flags;
flags.resize(512);

но как мне передать его (по ссылке) в функцию? Имейте в виду, я не знаю nofBits во время компиляции.

Я мог бы использовать

vector<vector<bool> > 

но не будет ли хуже с точки зрения использования памяти?

2 ответа

Решение

Недавно у меня возникла та же проблема, однако, как и в std::array, вам нужно знать размер набора битов во время компиляции, так как это параметр шаблона. Я нашел boost::dynamic_bitset в качестве альтернативы, и он работал как шарм.

std::vector<bool> специализируется на эффективном использовании памяти. Это примерно так же эффективно, как пространство std::bitset<N> (несколько дополнительных байтов, потому что его размер является динамическим и биты живут в куче).

Обратите внимание, однако, что std::vector<bool> есть проблемы, так что действовать осторожно

Другие вопросы по тегам