- 追加された行はこの色です。
- 削除された行はこの色です。
- bitset へ行く。
std::bitset
-----
#contents
-----
*bitset [#lb343410]
複数のbool型を連ねたようなもの.たくさんのフラグを格納するのに便利.
また,bool型は2値しかとらないのに1バイト領域を必要とし,メモリの無駄となる.
bitsetを使うことでメモリの節約にもなる.
#include <bitset>
***使用例 [#cacbb0a1]
#code(C){{
#include <cstdio>
#include <string>
#include <bitset>
using namespace std;
enum Draw
{
ID_DISPLAY_FLUID = 0,
ID_DISPLAY_RIGID,
ID_DISPLAY_CELLS,
ID_DISPLAY_BC,
ID_DISPLAY_NORMAL,
ID_DISPLAY_VELOCITY,
};
std::bitset<8> g_bsDraw; //!< 描画フラグ(大きさ8)
std::bitset<8> g_bsDraw2((string)"00101001"); //!< コンストラクタ引数あり1
std::bitset<8> g_bsDraw3((unsigned long)0xFF); //!< コンストラクタ引数あり2
int main(void)
{
g_bsDraw.reset(); // 全要素を0
// フラグをセット
g_bsDraw.set(ID_DISPLAY_FLUID, 1);
g_bsDraw.set(ID_DISPLAY_BC, 1);
g_bsDraw.set(ID_DISPLAY_VELOCITY, 1);
// フラグを反転
g_bsDraw.flip(ID_DISPLAY_NORMAL);
// 全フラグを反転
g_bsDraw.flip();
// 要素参照(g_bsDraw.testでも可),無効な要素参照時はout_of_range例外が投げられる
if(g_bsDraw.at(ID_DISPLAY_NORMAL)){
printf("normal on\n");
}
else{
printf("normal off\n");
}
// 例外なし要素参照
if(g_bsDraw[ID_DISPLAY_NORMAL]){
printf("normal on\n");
}
else{
printf("normal off\n");
}
// 内容を文字列で取得("11000110"など)
printf("bitset : %s\n", g_bsDraw.to_string().c_str());
// 内容をunsigned longで取得
printf("bitset : %d\n", g_bsDraw.to_ulong());
// true要素の数, 全要素数
printf("true : %d / %d\n", g_bsDraw.count(), g_bsDraw.size());
// 全要素をtrueにする
g_bsDraw.set();
// 全要素をfalseにする
g_bsDraw.reset();
// 全要素が0ならfalseを返す
if(!g_bsDraw.any()) printf("all false\n");
// 全要素が0ならtrueを返す
if(g_bsDraw.none()) printf("all false\n");
return 0;
}
}}
***オペレータ [#u7fa1e1b]
- ==,!= : bitset同士の比較
- &=,^=,|=,~ : 論理和,排他的論理和,論理積,否定
- <<,>>,<<=,>>= : シフト演算