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

C++ STLのdeque crend()関数とは?使い方をサンプルコード付きで解説

はじめに

本記事では、C++ STLにおけるdeque(デック)のcrend()関数の機能と使い方について、サンプルコードを交えながら詳しく解説します。

deque(両端キュー)とは?

dequeは「Double Ended Queue(両端キュー)」の略で、コンテナの両端(先頭と末尾)から要素の追加・削除ができるシーケンスコンテナです。

通常のキュー(queue)データ構造では、データの挿入は末尾からのみ、削除は先頭からのみ行うことができます。バス停の行列をイメージすると分かりやすいでしょう。行列には後ろから順に並び、先頭にいる人から順に乗車していきます。

一方、両端キュー(deque)では、データの挿入も削除も両端から行うことが可能です。この柔軟性がdequeの大きな特徴となっています。

crend()関数とは

dequeのcrend()関数は、dequeの先頭要素の直前の位置(逆順における終端)を指すconst_reverse_iteratorを返します。この位置は「逆順の終端(reverse end)」とみなされる理論上の位置であり、実際の要素を指していないため、逆参照(dereference)することはできません。主にcrbegin()と組み合わせて、dequeを逆順に走査する際に使用されます。

構文

deque_name.crend()

戻り値

crend()関数は、dequeのconst_reverse_iteratorを返します。このイテレータは読み取り専用であり、指し示す要素の値を変更することはできません。

使用例

入力:Deque − 5 4 3 2 1
出力:逆順のDeque − 1 2 3 4 5

入力:Deque − 75 45 33 77 12
出力:逆順のDeque − 12 77 33 45 75

処理の手順

  • まず、dequeを宣言します。
  • 次に、dequeの内容を出力します。
  • そして、crend()関数を使用して逆順に走査します。

上記の手順に従うことで、dequeを逆順に出力することができます。

サンプルコード1:数値のdequeを逆順に出力

// deque crend()関数の動作を示すC++コード
#include <iostream>
#include <deque>
using namespace std;

int main() {
    // dequeの宣言
    deque<int> deq = { 5, 4, 3, 2, 1 };

    // dequeの出力
    cout << "Deque: ";
    for (auto x = deq.begin(); x != deq.end(); ++x)
        cout << *x << " ";

    // dequeを逆順に出力
    cout << "\n逆順のDeque: ";
    for (auto x = deq.crbegin(); x != deq.crend(); ++x)
        cout << *x << " ";

    return 0;
}

出力結果

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

Deque: 5 4 3 2 1
逆順のDeque: 1 2 3 4 5

サンプルコード2:文字のdequeを逆順に出力

// crend()関数の動作を示すC++コード
#include <iostream>
#include <deque>
using namespace std;

int main() {
    deque<char> deq = { 'L', 'A', 'P', 'T', 'O', 'P' };

    cout << "Deque: ";
    for (auto x = deq.begin(); x != deq.end(); ++x)
        cout << *x << " ";

    // dequeを逆順に出力
    cout << "\n逆順のDeque: ";
    for (auto x = deq.crbegin(); x != deq.crend(); ++x)
        cout << *x << " ";

    return 0;
}

出力結果

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

Deque: L A P T O P
逆順のDeque: P O T P A L

まとめ

dequeのcrend()関数は、逆順走査における終端位置を指すconst_reverse_iteratorを返します。crbegin()(逆順の先頭を指す)と組み合わせることで、dequeの要素を末尾から先頭へと効率的に走査できます。要素を変更しない読み取り専用の処理には、crend()を活用するのが安全でC++らしい書き方といえるでしょう。

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

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

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

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