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

C++ STLのlist::rbegin()とlist::rend()関数の使い方を徹底解説

本記事では、C++ STLにおける list::rbegin() および list::rend() 関数の動作、構文、具体的な使用例について詳しく解説します。

STLにおけるリスト(List)とは?

リストは、シーケンス内の任意の位置に対して定数時間での挿入と削除を可能にするデータ構造です。リストは双方向連結リストとして実装されており、非連続的なメモリ割り当てが可能です。そのため、配列やvector、dequeと比較して、コンテナ内の任意の位置への要素の挿入・抽出・移動において優れたパフォーマンスを発揮します。一方で、要素への直接アクセス(ランダムアクセス)は遅いという特徴があります。また、リストはforward_listと似ていますが、forward_listは単方向連結リストであり、前方方向にしかイテレートできない点が異なります。

list::rbegin()とは?

list::rbegin() はC++ STLに組み込まれている関数で、ヘッダーファイルで宣言されています。rbegin()は「reverse begin(逆順の先頭)」を意味する関数であり、リストの最後の要素を指す逆イテレータ(リバースイテレータ)を返します。逆イテレータとは、末尾から開始して先頭に向かって逆方向に移動するイテレータのことです。back() も最後の要素を返しますが、rbegin()が返すのは双方向イテレータであり、後方方向へ移動できる点が単純なイテレータとは異なります。

構文

list_container1.rbegin();

パラメータ

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

使用例

Input: list<int> List_container = {10, 11, 13, 15};
       List_container.rbegin();
Output:
       List = 15

戻り値

この関数は、リストの最後の要素を指す逆イテレータを返します。逆イテレータは後方方向へ移動するイテレータです。

rbegin()の実際のコード例

#include <bits/stdc++.h>
using namespace std;
int main(){
   list<int> myList = { 10, 20, 30, 40 };
   cout<<"List is: ";
   for (auto i = myList.rbegin(); i!= myList.rend(); ++i)
      cout << *i << " ";
   return 0;
}

出力結果

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

List is: 40 30 20 10

この例では、rbegin() から rend() までループを回すことで、リストの要素が逆順(40, 30, 20, 10)に出力されていることがわかります。

list::rend()とは?

list::rend() もC++ STLに組み込まれている関数で、ヘッダーファイルで宣言されています。rend()は「reverse end(逆順の終端)」を意味する関数であり、関連付けられたリストコンテナの最初の要素の直前の位置を指す逆イテレータを返します。逆イテレータは末尾から開始し、先頭に向かって逆方向に移動するイテレータです。つまり、rend()が返す位置は逆順走査における「終端」の目印となり、実際の要素は指していません。

構文

list_container1.rend();

パラメータ

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

使用例

Input: list<int> List_container = { 10, 11, 13, 15};
       List_container.rend();
Output:
       List = 5 // リストの先頭より前の不定な値が表示される

戻り値

この関数は、リスト内の最初の要素の直前の位置を指す逆イテレータを返します。この位置には有効な要素が存在しないため、逆イテレータがリストの終端に到達したかどうかを判定するために使用されます。

rend()を使った実際のコード例

#include <bits/stdc++.h>
using namespace std;
int main(){
   list<int> myList = { 10, 20, 30, 40 };
      cout<<"List is : ";
   for (auto i = myList.rbegin(); i!= myList.rend(); ++i)
      cout << *i << " ";
   return 0;
}

出力結果

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

List is: 40 30 20 10

まとめ

rbegin()rend() を組み合わせることで、リストの要素を末尾から先頭へ向かって逆順に走査できます。通常のイテレータでは begin()end() の組み合わせを使うのに対し、逆順走査ではこの2つの関数を使用するのが基本パターンです。要素を逆順に処理したい場面でぜひ活用してください。

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

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

  2. C++STLのlist back()関数の使い方を解説

    C++のlist back()関数とは本記事では、C++におけるlist back()関数の動作について詳しく解説します。list::back()関数は、C++標準テンプレートライブラリ(STL)の一部であり、リストの最後(末尾)の要素を取得・表示するために使用されます。この関数を呼び出す前に、必ず<list>ヘッダーファイルをインクルードする必要がある点に注意してください。構文List_Name.back();パラメータこの関数は、いかなるパラメータも受け取りません。戻り値この関数は、リストの最後の要素の値を返します。なお、リストが空の場合の動作は未定義となるため、呼び出し前にリ