C++ 创建一个大的位集
我需要使用大小为400000000的位集。就这样,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分配内存。堆比堆栈
#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。