2

我试图实现以下代码

#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 但想象我们在这种情况下从键盘输入数字最大数字是未知的谢谢

4

3 回答 3

8

问题:必须在编译时知道 C++ 位集的大小,因此大小是位集的模板参数。

一个可能的解决方案(并且可能比使用 a 更好std::vector<bool>,正如其他海报所建议的那样):如果您想使用可以在运行时修复其大小的位集,您可以使用Boost库中的dynamic_bitset 。

在您的情况下,您将使用

boost::dynamic_bitset<> mybits(max+1);
于 2010-07-17T12:48:30.247 回答
3

我认为,如果您在编译时不知道位数将是多少,则需要使用vector<bool>, 代替。这个来自 STL 的奇怪结构实际上实现了一个类似位集的类,而不是你知道的布尔向量。它的性能不如std::bitset,但权衡的是它可以动态增长......

于 2010-07-17T12:45:54.013 回答
0

在这种情况下,使用std::vector<bool>.

于 2010-07-17T12:47:11.490 回答