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

C++ STLのlistにおけるcrbegin()・crend()関数の使い方を解説

C++のSTL(標準テンプレートライブラリ)には、リストを逆方向に走査するための便利なメンバ関数が用意されています。本記事では、list::crbegin()list::crend()の2つの関数の動作について詳しく解説します。

これらの関数はC++標準テンプレートライブラリの一部であり、使用するには<list>ヘッダーをインクルードする必要があります。

list::crbegin()とは

list::crbegin()は、リストの逆先頭(つまりリストの末尾要素)を指す定数リバースイテレータを返します。この関数を使うと、リストを末尾から先頭へ向かって辿ることができますが、イテレータを通じてリストの値を変更することはできません。つまり、crbegin()は読み取り専用のイテレーションにのみ使用できます。

構文

List_Name.crbegin()

パラメータ

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

戻り値

リストの逆先頭、すなわちリストの末尾要素を指す定数リバースイテレータ(const_reverse_iterator)を返します。

list::crend()とは

list::crend()は、リストの逆終端、すなわちリストの先頭要素の直前(理論上の位置)を指す定数リバースイテレータを返します。この関数もリストを逆方向に辿るために使用できますが、値の変更はできず、読み取り専用のイテレーションにのみ使用できます。

構文

List_Name.crend()

パラメータ

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

戻り値

リストの逆終端、すなわちリストの先頭の直前を指す定数リバースイテレータを返します。

使用例

入力: list<int> Lt = {99, 34, 55}
出力: The last element is 55

説明:

ここでは、要素99、34、55を持つリストを作成し、crbegin()関数を呼び出しています。この関数はリストの逆先頭、つまりリストの末尾を指すため、出力結果はリストの最後の要素である55となります。

プログラムのアプローチ

  • まず、int型のリスト(例:「Lt」)を作成し、いくつかの値を代入します。
  • 次に、リストを走査するためのループを開始します。
  • ループ内で、crbegin()crend()の戻り値を格納するauto型のオブジェクト「itr」を作成し、crbegin()で初期化します。
  • ループの終了条件として、「itr」がcrend()と等しくなったかどうかを判定します。
  • *itrの値を出力します。

アルゴリズム

開始
Step 1-> main()関数内で
    list<int> Lt = {} を初期化
    auto itr = Lt.crbegin() とし、itr != Lt.crend() の間 itr++ でループ
    *itr を出力
終了

サンプルコード

#include<iostream>
#include<list>
using namespace std;
int main() {
    list<int> Lt = { 33,44,55,66 };
    // リストの要素を出力
    cout << "リストの要素は次のとおりです : " << "\n";
    for (auto itr = Lt.crbegin(); itr != Lt.crend(); itr++)
        cout << *itr << " ";
    return 0;
}

出力

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

リストの要素は次のとおりです :
66 55 44 33

このように、crbegin()からcrend()までイテレータを進めることで、リストの要素を末尾から先頭に向かって逆順に出力できます。また、これらの関数が返すイテレータは定数(const)であるため、走査中にリストの要素を誤って変更してしまう心配がありません。読み取り専用でリストを逆方向に走査したい場合に、crbegin()crend()は非常に便利な関数です。

  1. C++ STLのlist::reverse()関数の使い方と実例解説

    本記事では、C++におけるlist::reverse()関数の動作、構文、具体的な使用例について詳しく解説します。STLにおけるlistとはlistは、シーケンス内の任意の位置で定数時間O(1)での要素の挿入・削除を可能にするデータ構造です。listは双方向連結リストとして実装されており、メモリの非連続的な割り当てが可能です。配列、vector、dequeと比較すると、コンテナ内の任意の位置への要素の挿入・抽出・移動において優れたパフォーマンスを発揮します。一方で、要素への直接アクセス(ランダムアクセス)は遅いという特徴があります。listはforward_listと似ていますが、forwar

  2. C++ STLのarray::crbegin()とarray::crend()の使い方を解説

    この記事では、C++ STLのstd::arrayが提供するcrbegin()とcrend()という2つのメンバ関数について詳しく解説します。これらの関数を使うと、配列の要素を逆順に安全に走査することができます。 array::crbegin() とは array::crbegin()は、コンテナの逆順イテレータ(リバースイテレータ)を取得するための関数です。戻り値は定数(const)の逆順イテレータであり、コンテナの最後の要素を指します。 「c」が接頭辞についていることからわかるように、このイテレータは読み取り専用です。つまり、イテレータを通じて要素の値を変更しようとするとコンパイルエラーに