C++ 创建一个大的位集

C++ 创建一个大的位集,c++,memory-management,stl,bitset,C++,Memory Management,Stl,Bitset,我需要使用大小为400000000的位集。就这样, #include<iostream> #include<bitset> using namespace std; int main(){ bitset<400000000> coord;} #包括 #包括 使用名称空间std; int main(){ 位集坐标;} 但是我的程序崩溃了,因为位集太大了。那么如何动态分配一个位集呢?我不能使用boost库。您可以在堆中用new分配内存。堆比堆栈

我需要使用大小为400000000的位集。就这样,

 #include<iostream>

 #include<bitset>

 using namespace std;

 int main(){
 bitset<400000000> coord;}
#包括
#包括
使用名称空间std;
int main(){
位集坐标;}

但是我的程序崩溃了,因为位集太大了。那么如何动态分配一个位集呢?我不能使用boost库。

您可以在堆中用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;
 }
#包括
#包括
使用名称空间std;
int main(){
比特集*coord_ptr=新比特集();
位集坐标=*coord\u ptr;
// 
删除协调;
}

>你可能会考虑被严重诽谤<代码> STD::vector < /代码>。我不能使用它,因为我使用BITSET创建一个大小小于8倍的布尔代数数组。normal@JerryCoffin你不应该考虑<代码> STD::向量< /代码>(它不是容器)。你并不总是需要一个容器。比特集也不是一个容器,其他任何将布尔值存储为单个比特的东西都不是。简言之,
std::vector
的缺点将同样适用于他选择的任何替代方案。但是,当我执行如下操作时,我的程序崩溃:#include#include使用名称空间std;int main(){bitset*coord=new bitset;coord[8]=1;}试试这个:bitset&coord=*(new bitset());我不知道为什么这是不同的,但当我编译它运行良好。请不要实际使用此代码的任何东西,有一个巨大的memoryleak。