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

【C++ STL】forward_list::cbefore_begin()関数の使い方を徹底解説

本記事では、C++の標準テンプレートライブラリ(STL)に含まれるforward_list::cbefore_begin()関数の動作について解説します。

forward_listとは

通常のlistは、次の要素だけでなく前の要素へのリンクも保持しているため、双方向のイテレーションが可能です。一方、forward_listは次の要素へのリンクのみを保持する単方向連結リストであり、前方方向にしかイテレートできません。

forward_list::cbefore_begin()はC++標準テンプレートライブラリの一部であり、リストの先頭要素の直前の位置を指すイテレータを取得するために使用されます。この関数を呼び出すには、ヘッダーファイル<forward_list>をインクルードする必要があります。

構文

Forward_List_Name.cbefore_begin();

パラメータ

この関数は引数を受け取りません。

戻り値

forward_listの先頭要素の直前の位置を指す定数イテレータ(const_iterator)を返します。

使用例

入力:8, 9, 32, 21
出力:56 8 9 32 21

説明:ここでは要素 8, 9, 32, 21 を持つforward_listを作成しています。次にcbefore_begin()関数を呼び出し、リストの先頭要素の直前の位置を指すイテレータを取得してitrに格納します。その後、insert_after()関数を使って、先頭要素である8の直前に新しい要素56を挿入します。結果を出力すると「56 8 9 32 21」となり、56がリストの先頭に追加されたことがわかります。つまり、cbefore_begin()関数が正しく機能したことになります。

プログラムの手順

  • まずint型のforward_list(例:「Lt」)を作成し、いくつかの値を代入します。
  • auto型のオブジェクト「itr」を作成し、cbefore_begin()関数の戻り値であるイテレータを格納します。
  • insert_after()関数を使用して、リストの先頭に新しい要素を挿入します。第1引数にイテレータ「itr」、第2引数に挿入する値を渡します。
  • forループを使ってリストの内容を出力します。
  • forループ内でauto型のオブジェクト「itr」を作成し、begin()関数でリストの最初の要素を指すよう初期化します。
  • 終了条件として、「itr」がend()関数が返す末尾と等しくない間、ループを継続します。
  • *itr の値を出力します。

アルゴリズム

Start
Step 1-> main() 関数内で
    forward_list<int> Lt={} を初期化
    auto itr = Lt.cbefore_begin() を初期化
    insert_after(itr, new_element) を呼び出す
    auto itr = Lt.begin() から itr != Lt.end() の間、itr++ を繰り返す
    *itr を出力
    End
Stop

サンプルコード

#include<iostream>
#include<forward_list>
using namespace std;
int main() {
    forward_list<int> Lt = { 40, 55, 67, 89 };
    auto itr = Lt.cbefore_begin();
    Lt.insert_after(itr, 77);
    for (auto it = Lt.begin(); it != Lt.end(); ++it)
    cout << *it << " ";
    return 0;
}

出力結果

上記のコードを実行すると、以下の出力が生成されます。

77 40 55 67 89

まとめ

cbefore_begin()は、forward_listの先頭より前の位置を指す定数イテレータを返す関数です。単独ではあまり用途がありませんが、insert_after()emplace_after()と組み合わせることで、リストの先頭に効率的に要素を挿入できます。また、戻り値が定数イテレータであるため、参照先の値を変更できない点にも注意しましょう。

  1. C++ STLのcosh()関数とは?双曲線余弦の求め方をサンプルコード付きで解説

    cosh()関数とは? C++のSTLに組み込まれているcosh()関数は、ラジアン単位で与えられた角度の双曲線余弦(ハイパボリック・コサイン)を計算して返す関数です。使用するには、<cmath>ヘッダーをインクルードする必要があります。 双曲線余弦は、数学的に次の式で定義されます。 cosh(x) = (e^x + e^(-x)) / 2 構文 cosh()関数の構文は以下の通りです。 cosh(var) 構文から分かるように、cosh()関数はfloat型、double型、long double型のいずれかの引数varを受け取ります。そして、その双曲線余弦を返します。なお、引

  2. C++ STLのsinh()関数の使い方を徹底解説

    sinh()関数とはsinh()関数は、ラジアンで指定された値の双曲線正弦(ハイパボリックサイン)を返す関数です。C++のSTL(標準テンプレートライブラリ)に組み込まれており、<cmath>ヘッダをインクルードすることで利用できます。双曲線正弦は、以下の数式で定義されます。sinh(x) = (e^x − e^−x) / 2sinh()関数の構文sinh()関数の構文は以下のとおりです。sinh(var)構文からわかるように、sinh()関数はfloat型、double型、long double型のいずれかのパラメータvarを受け取ります。戻り値は、varの双曲線正弦です。sin