2017-04-04 3 views
2

問題はこれです:オブジェクトの束について真偽情報を保持するためにビットマップ(一連のバイナリフラグ)を作成する必要があります。オブジェクトの数は先験的には分かっていないので、ビットマップの作成中に実行時に十分なフラグを割り当てる必要があります。 max_num_elements要素を考えるとバイナリフラグを保持するC++のビットマップ

、私の最初のアイデアは、((num_elements/8)+1)*sizeof(char)ビットの配列を割り当てることだった:charがあれば、8進フラグを扱うことができる8ビットであるので、私はchar秒のminimun数がnum_elementsフラグを保持するために取得するので、最大で7ビットのメモリの無駄。

本当の問題は、フラグを設定/確認するためのものです:私は、ビット単位に続く配列全体にいくつかのbitshiftingを行うには、フラグを取得するために取り払わNのような

flag_n = (flag_array>>n)&0d1 

が、私は、正しくシフトを理解している場合操作は最初の要素だけで、配列全体には影響しません。

どうすればこの問題を解決できますか?

+0

私は何かが欠けていない限り、なぜビットマップではなく長いですか?最初のビットは、あるプロパティについては真/偽を、もう一つのプロパティについては二番目のビットを保持します。 – Eugene

答えて

1

std::vector<bool>は、これを正確に達成するために特化されています。

It is actually a problem in many casesbool&ではなく、要素にアクセスするとプロキシオブジェクトが返されるため、他のすべてのコンテナと同じように動作するわけではありませんが、必要に応じて動作します。

+0

ありがとう、私はこの専門化について知りませんでした、非常に役に立つでしょう。 しかし、リンクを読んで私は[std :: bitset](http://en.cppreference.com/w/cpp/utility/bitset/bitset)も見つけました。私のニーズに最も合っているので、私のプロジェクト。 – fudo

関連する問題