C++ STLのbitset::flip()関数の使い方を徹底解説
bitset::flip()は、C++の標準テンプレートライブラリ(STL)に最初から組み込まれているbitsetクラスのメンバ関数です。この関数は、呼び出し元のbitsetオブジェクトが保持しているビットを反転させる働きを持ちます。
bitset::flip()の基本的な動作
引数を何も指定せずに呼び出した場合は、bitset内のすべての「0」を「1」に、すべての「1」を「0」に変換します。つまり、呼び出し元のbitsetに含まれる全ビットを一括して反転する機能です。
一方、整数nを引数として渡した場合は、n番目のビットのみを反転します。なお、ビットの位置は最下位ビット(LSB)側の右端を0番目として数える点に注意してください。
構文
bitset_name.flip(int pos)
- pos(省略可能): 反転したいビットの位置。省略した場合はすべてのビットが反転されます。
動作イメージ
初期状態のbitset: 100110
引数なしでflip()を実行した場合: 011001(全ビットが反転される)
10ビットのbitset「0100001111」に対してflip(7)を実行した場合: 0110001111(7番目のビットだけが反転される)
サンプルコード
#include <bits/stdc++.h>
using namespace std;
int main() {
bitset<6> bit1(string("100110"));
bitset<10> bit2(string("0100001111"));
cout << "flip()実行前 : " << bit1 << endl;
bit1.flip();
cout << "flip()実行後(引数なし) : " << bit1 << endl;
cout << "flip(7)実行前 : " << bit2 << endl;
bit2.flip(7);
cout << "flip(7)実行後 : " << bit2 << endl;
return 0;
}
実行結果
flip()実行前 : 100110 flip()実行後(引数なし) : 011001 flip(7)実行前 : 0100001111 flip(7)実行後 : 0110001111
使用時の注意点
- flip(pos)で指定するビット位置は、右端(最下位ビット)を0番目として数えます。
- bitsetのサイズを超える位置を指定すると、std::out_of_range例外がスローされます。
- flip()は戻り値として自分自身への参照(*this)を返すため、他の操作と連続させて記述するメソッドチェーンにも対応しています。
bitset::flip()を使いこなすことで、フラグ管理やビット演算が必要な場面において、簡潔かつ効率的にビットの反転処理を実装できるようになります。
-
C++ STL入門:setとunordered_setの違いを徹底解説
本記事では、C++ STLにおける set と unordered_set の概要をわかりやすく解説し、両者の違いについても詳しく学んでいきます。 setとは? set(セット)は、Key型の一意なオブジェクトをソート済みの状態で格納する連想コンテナです。各要素は一度しか出現できず、重複した値は許されません。ユーザーは任意の順序で要素を挿入してsetを作成できますが、setは常にソートされた形でデータを返します。つまり、setにはデータを並べ替えるための仕組みが内部に組み込まれており、その処理はユーザーから抽象化されています。 setを使うべき主なケースは以下の通りです。 ソート済みのデ
-
C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード
C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。 スタックで使える主な操作 1. top() – 最上位要素の取得 スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。 構文:name_of_stack.top() 引数:なし 戻り値:ス