1

我想在 C++ 中实现一个算法,该算法需要一个动态分配的巨大位集向量(512x18,000,000 位 - 我有 16Gb 的 RAM)。

a)这很好用

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

但是我如何将它(通过引用)传递给函数?请记住,我不知道编译时的nofBits。

我可以使用

vector<vector<bool> > 

但是在内存使用方面会不会更糟?

4

2 回答 2

3

我最近遇到了同样的问题,但是就像 std::array 一样,您需要在编译时知道位集的大小,因为它是模板参数。我发现boost::dynamic_bitset是一种替代方法,它就像一个魅力。

于 2013-07-13T10:18:45.320 回答
2

std::vector<bool>专门用于有效地使用内存。它大致与空间效率一样高std::bitset<N>(一些额外的字节,因为它的大小是动态的并且位位于堆上)。

但是请注意,这std::vector<bool>问题,因此请小心行事。

于 2013-07-13T10:27:38.700 回答