【C++ STL】deque::rend()関数の使い方をサンプルコード付きで解説
C++ STLにおけるdeque(デック)のrend()関数の機能と使い方を、サンプルコードと実行結果とともに詳しく解説します。
deque(両端キュー)とは?
dequeは「Double Ended Queue(両端キュー)」の略で、シーケンスコンテナの一種です。先頭と末尾の両方で要素の挿入・削除ができる点が最大の特徴です。
通常のキュー(queue)データ構造では、データの挿入は末尾からのみ行い、削除は先頭からのみ行います。バス停の行列を想像すると分かりやすいでしょう。新しく来た人は列の最後尾に並び、乗車するのは先頭にいる人から順番に、という具合です。一方、両端キュー(deque)では、挿入も削除も先頭・末尾のどちら側でも自由に行うことができます。
rend()関数とは?
rend()関数は、dequeコンテナ内の最初の要素の直前の位置を指す逆イテレータ(reverse iterator)を返します。rbegin()と組み合わせて使用することで、dequeを後ろから前へ逆順に走査できます。
構文: deque_name.rend()
戻り値: dequeの先頭要素の直前の位置を指す逆イテレータを返します。
動作例
入力: Deque − 5 4 4 2 0
出力: 逆順のDeque − 0 2 4 4 5入力: Deque − S U B T R A C T
出力: 逆順のDeque − T C A R T B U S
処理の手順
まず、dequeを宣言して初期化します。
元のdequeの内容を出力します。
rbegin()からrend()まで逆イテレータで走査し、rend()関数を活用します。
逆順にした結果を出力します。
上記の手順に従うことで、逆順のdequeを簡単に取得できます。
サンプルコード1:整数のdeque
// deque rend() 関数の動作を示すC++コード
#include <iostream>
#include <deque>
using namespace std;
int main() {
// dequeの初期化
deque<int> dq = { 7, 4, 0, 3, 7 };
// dequeの出力
cout << "Deque: ";
for (auto x = dq.begin(); x != dq.end(); ++x)
cout << *x << " ";
// 逆順のdequeを出力
cout << "\nReversed deque: ";
for (auto x = dq.rbegin(); x != dq.rend(); ++x)
cout << *x << " ";
return 0;
}
実行結果
Deque: 7 4 0 3 7 Reversed deque: 7 3 0 4 7
サンプルコード2:文字のdeque
// deque rend() 関数の動作を示すC++コード
#include <iostream>
#include <deque>
using namespace std;
int main() {
// dequeの初期化
deque<char> dq = { 'S', 'U', 'B', 'T', 'R', 'A', 'C', 'T' };
// dequeの出力
cout << "Deque: ";
for (auto x = dq.begin(); x != dq.end(); ++x)
cout << *x << " ";
// 逆順のdequeを出力
cout << "\nReversed deque: ";
for (auto x = dq.rbegin(); x != dq.rend(); ++x)
cout << *x << " ";
return 0;
}
実行結果
Deque: S U B T R A C T Reversed deque: T C A R T B U S
まとめ
rend()関数は、dequeの先頭要素の直前の位置を指す逆イテレータを返す関数です。rbegin()とセットで使うことで、コンテナを後ろから前へ逆順に走査できます。なお、rend()が指す位置には有効な要素が存在しないため、直接逆参照することはできません。走査は必ずrbegin()からrend()の手前まで行ってください。整数型だけでなく文字型など、さまざまな型のdequeに対して同様に利用できる点も覚えておくと便利です。
-
C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード
C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。 スタックで使える主な操作 1. top() – 最上位要素の取得 スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。 構文:name_of_stack.top() 引数:なし 戻り値:ス
-
C++のSTLを使ったDeque(両端キュー)の実装方法を解説
両端キュー(Double Ended Queue、略称:Deque)は、キューの一種であり、先頭(front)と末尾(rear)の両端で要素の挿入・削除が行えるデータ構造です。通常のキューは片側から挿入し反対側から削除するだけですが、dequeは双方向からの操作に対応しているため、より柔軟なデータ管理が可能になります。 C++では、標準テンプレートライブラリ(STL)に <deque> ヘッダとして両端キューが標準搭載されているため、自前で実装しなくても手軽に利用できます。本記事では、STLのdequeを使用したメニュー形式の対話型プログラムを通じて、基本的な使い方を解説します。