std::bitset bitset†複数のbool型を連ねたようなもの.たくさんのフラグを格納するのに便利. また,bool型は2値しかとらないのに1バイト領域を必要とし,メモリの無駄となる. bitsetを使うことでメモリの節約にもなる. #include <bitset> 使用例†#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; } オペレータ†
|