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;
}

しかし、最大値は何をすべきか定数でなければならないと言っていますか?ここで、最大要素が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 からのこの奇妙な構造は、実際にはビットセットのようなクラスを実装しており、bool のベクトルではありません。そのパフォーマンスは std::bitset ほど良くありませんが、動的に拡張できるというトレードオフがあります....

于 2010-07-17T12:45:54.013 に答える
0

その場合は、 を使用してstd::vector<bool>ください。

于 2010-07-17T12:47:11.490 に答える