我试图实现以下代码
#include <iostream>
#include <bitset>
using namespace std;
int main(){
//bitset<4>mybits;
//cout<<mybits<<endl;
int a[]={3,1,4,5,7,8};
int max=a[0];
int t=sizeof(a)/sizeof(a[0]);
for (int i=1;i<t;i++){
if (a[i]>max){
max=a[i];
}
}
bitset<max+1>mybits;
return 0;
}
但它说max必须有恒定的值怎么做?这里我知道最大元素是8但是想象一下我们从键盘输入数字,在这种情况下最大数字是未知的,谢谢
答案 0 :(得分:8)
问题:必须在编译时知道C ++ bitset的大小,因此size是bitset的模板参数。
一种可能的解决方案(可能比使用std::vector<bool>
更好,正如其他海报所建议的那样):如果你想使用一个可以在运行时修复其大小的bitset,你可以使用dynamic_bitset来自Boost库。
在您的情况下,您将使用
构建它boost::dynamic_bitset<> mybits(max+1);
答案 1 :(得分:3)
我认为如果你在编译时不知道比特数是多少,你需要使用vector<bool>
。 STL的这个奇怪的结构实际上实现了类似bitset的类,而不是你知道的bool向量。它的性能不如std :: bitset,但权衡的是它可以动态增长....
答案 2 :(得分:0)
在这种情况下,请使用std::vector<bool>
。