首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++中定义较大的位集

在C++中定义较大的位集
EN

Stack Overflow用户
提问于 2011-04-25 23:44:51
回答 4查看 11.3K关注 0票数 16

在我的程序中,我需要检查是否已经在2.5*10^9的集合中生成了一个值。我希望生成该集合的大约一半的值,并且需要有一种快速的方法来检查和更新它。位集在我看来是一个好主意,因为它不需要太多内存(每个值1位),而且速度很快。

问题是,当我在我的类中定义我的set时,我得到了一个segmentation fault,因为它太大了(它适用于较小的尺寸)。

代码语言:javascript
运行
复制
private:
  std::bitset<2500000000UL> cover; // not working
  std::bitset<25000UL> cover; // working

有什么想法吗?

谢谢

PS:如果可能的话,我宁愿不使用外部库。我已经在使用GMP了,但我不认为他们有一个针对大数的位集合实现。

EN

Stack Overflow用户

发布于 2021-04-04 02:56:48

它会导致分段错误,因为这里的内存是在堆栈而不是堆上分配的。堆栈上的内存分配非常有限,因此无法做到这一点。这就是动态内存分配的用武之地。如果你知道malloc是如何工作的,你可以修改代码,如下所示。

代码语言:javascript
运行
复制
bitset<1000000000> *b;
b = (bitset<1000000000> *)malloc(sizeof(bitset<1000000000>));
b->set(0,1);

完成位集后,使用delete关键字将其删除。

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5780112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档