32

C++ でビットセットを作成したい。少し調べてみました。私が見つけたすべての例は、次のような場所です:

bitset<6> myBitset;
// do something with it

しかし、クラスで変数を定義するときのビットセットのサイズはわかりません。

#include <bitset>
class Test
{
public:
     std::bitset *myBitset;
}

これはコンパイルされません...

また、このような初期化も機能しません:

int size = getDependentSizeForBitset();
myBitset = new bitset<size>();
4

6 に答える 6

28

ブーストにはdynamic_bitset使用できる機能があります。

vector<bool>または、 (残念ながら)ビットセットとして機能するように特化された を使用できます。これは多くの混乱を引き起こし、一般的に悪い考えと考えられています。でもそういう仕組みなので、それが必要なら使ってもいいんじゃないかな。

于 2010-06-28T17:40:53.523 に答える
7

Boost::dynamic_bitsetを使用する

于 2010-06-28T17:39:30.850 に答える
1

ブースト dynamic_bitset を確認する必要があります。

于 2010-06-28T17:40:23.180 に答える
1

あなたが最初に言っていることは真実ではありません。「あなたが見つけた例」は、あなたが投稿したようには見えませんでした。テンプレートをパラメータ化するために非定数値を使用することはできません。したがって、最初の例は無効です。テンプレートの非型引数として使用できるのは、定数式のみです。つまり、非型引数はコンパイル時の定数でなければなりません。

サイズがコンパイル時の定数ではないビットセットを作成したいようです。この場合、bitsetテンプレートは問題外です。実行時サイズのビットセットの実装が必要です。たとえば、次のように使用できますstd::vector<bool>- 多くの (すべてではないにしても) 実装では、このテンプレートはブール値のパック配列を実装するように特化されており、各要素は (boolオブジェクトではなく) 1 ビットを占有します。

于 2010-06-28T17:40:25.747 に答える
0

bitset はテンプレート パラメーターとしてサイズを必要とします。つまり、サイズはコンパイル時に決定できる必要があります。ユーザー入力のようなランタイム条件に基づくことはできません。

そのためには、std::vector または boost::dynamic_bitset を調べる必要があります。std::vector は、要素ごとに 1 ビットを使用する特殊なテンプレートのインスタンス化です。ビットセットとは異なり、動的にサイズを変更できます。

于 2010-06-28T17:43:45.843 に答える