创建一个大的位集

4
我需要使用一个大小为400000000的位集。就像这样:
 #include<iostream>

 #include<bitset>

 using namespace std;

 int main(){
 bitset<400000000> coord;}

但我的程序由于位集太大而崩溃。那么如何动态分配一个位集?我不能使用boost库。


你可能会考虑使用备受诟病的 std::vector<bool> - Jerry Coffin
我不能使用那个,因为我正在使用 bitset 来创建一个布尔数组,其大小比正常数组少了 8 倍。 - Frank
@JerryCoffin 你永远不应该考虑使用std::vector<bool>(它不是一个容器)。 - mookid
3
抱歉,但是这个说法是无意义的。并不总是需要容器。位集合(bitset)也不是一个容器,而且任何将布尔值存储为单个位的东西都不是容器。简而言之,std::vector<bool> 的缺点同样适用于他选择的任何其他替代品。 - Jerry Coffin
1个回答

3
你可以使用new在堆上分配内存。堆比栈大得多。代码如下。
 #include<iostream>

 #include<bitset>

 using namespace std;

 int main(){
    bitset<400000000UL>* coord_ptr = new bitset<400000000UL>();
    bitset<400000000UL> coord = *coord_ptr;
    // <~~ do stuff ~~>
    delete coord_ptr;
 }

1
但是当我做类似以下操作时,我的程序就会崩溃:#include<iostream>#include<bitset>using namespace std;int main(){ bitset<400000000> *coord = new bitset<400000000>; coord[8]=1; } - Frank
尝试使用以下代码:bitset<4000000UL>& coord = *(new bitset<4000000UL>())。我不确定为什么会有区别,但在编译时运行良好。 - dhalik
2
请不要将此代码用于任何实际应用,因为它存在巨大的内存泄漏问题。 - Trent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接