Я хочу реализовать алгоритм на C ++, которому нужен динамически назначаемый огромный вектор битов (512×18 000 000 бит — у меня 16 ГБ ОЗУ).
а) это отлично работает
int nofBits=....(function read from db);
vector < bitset <nofBits> > flags;
flags.resize(512);
но как мне передать его (по ссылке) в функцию? Имейте в виду, я не знаю nofBits во время компиляции.
Я мог бы использовать
vector<vector<bool> >
но не будет ли хуже с точки зрения использования памяти?
Недавно у меня возникла та же проблема, однако, как и в std :: array, вам нужно знать размер набора битов во время компиляции, поскольку это параметр шаблона. я нашел повышение :: dynamic_bitset как альтернатива, и это работало как шарм.
std::vector<bool>
специализируется на эффективном использовании памяти. Это примерно так же эффективно, как пространство std::bitset<N>
(несколько дополнительных байтов, потому что его размер является динамическим и биты живут в куче).
Обратите внимание, однако, что std::vector<bool>
имеет проблемы, так поступай легко.