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++らしい書き方といえるでしょう。
-
C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード
C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。 スタックで使える主な操作 1. top() – 最上位要素の取得 スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。 構文:name_of_stack.top() 引数:なし 戻り値:ス
-
C++ STLのlist::reverse()関数の使い方と実例解説
本記事では、C++におけるlist::reverse()関数の動作、構文、具体的な使用例について詳しく解説します。STLにおけるlistとはlistは、シーケンス内の任意の位置で定数時間O(1)での要素の挿入・削除を可能にするデータ構造です。listは双方向連結リストとして実装されており、メモリの非連続的な割り当てが可能です。配列、vector、dequeと比較すると、コンテナ内の任意の位置への要素の挿入・抽出・移動において優れたパフォーマンスを発揮します。一方で、要素への直接アクセス(ランダムアクセス)は遅いという特徴があります。listはforward_listと似ていますが、forwar