C++
 Computer >> コンピューター >  >> プログラミング >> C++

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()を使いこなすことで、フラグ管理やビット演算が必要な場面において、簡潔かつ効率的にビットの反転処理を実装できるようになります。

  1. C++ STL入門:setとunordered_setの違いを徹底解説

    本記事では、C++ STLにおける set と unordered_set の概要をわかりやすく解説し、両者の違いについても詳しく学んでいきます。 setとは? set(セット)は、Key型の一意なオブジェクトをソート済みの状態で格納する連想コンテナです。各要素は一度しか出現できず、重複した値は許されません。ユーザーは任意の順序で要素を挿入してsetを作成できますが、setは常にソートされた形でデータを返します。つまり、setにはデータを並べ替えるための仕組みが内部に組み込まれており、その処理はユーザーから抽象化されています。 setを使うべき主なケースは以下の通りです。 ソート済みのデ

  2. C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード

    C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。 スタックで使える主な操作 1. top() – 最上位要素の取得 スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。 構文:name_of_stack.top() 引数:なし 戻り値:ス