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>
есть проблемы, так что действовать осторожно