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

C++のdeque::crbegin()の使い方を徹底解説

本記事では、C++におけるdeque::crbegin()の動作と使い方について詳しく解説します。

deque(デック)は「double ended queue(両端キュー)」と呼ばれるコンテナで、先頭(front)と末尾(back)の両端において高速な挿入・削除が可能です。これは、末尾(back)のみで高速な挿入を行えるvectorとは対照的な特徴です。

さらに、dequeは要素へのランダムアクセスにも対応しています。insert()を使えば途中の位置に要素を挿入することも可能ですが、その場合のパフォーマンスはvectorと同様にあまり良くない点には注意が必要です。

deque::crbegin()とは?

deque::crbegin()の「crbegin」は「constant reverse begin(定数逆順の先頭)」の略です。この名前が示す通り、この関数はconst_reverse_iterator(定数逆順イテレータ)を返します。つまり、コンテナを末尾から先頭へ向かって逆順に走査するための、読み取り専用イテレータを取得するためのメンバ関数です。

定数イテレータとは?

定数イテレータ(const_iterator)とは、要素を変更するためではなく、アクセス(参照)するために使用されるイテレータです。const_reverse_iteratorが指し示す要素を読み取ることはできますが、その値を書き換えることはできません。

要素を変更したい場合は、非constの通常のイテレータ(rbegin()begin()などが返すイテレータ)を使用します。

構文

dequename.crbegin()

戻り値:

コンテナの最後の要素(逆順走査の開始点)を指すconst_reverse_iteratorを返します。

戻り値の型であるconst_reverse_iteratorは、const要素を指す逆順ランダムアクセスイテレータ型です(詳細はdequeのメンバ型のドキュメントを参照してください)。なお、逆順走査の終了条件には、対応するcrend()を使用します。

使用例

以下のコードでは、crbegin()からcrend()までループを回すことで、dequeの要素を末尾から先頭へ逆順に出力しています。

#include <iostream>
#include <deque>

int main() {
    std::deque<int> mydeque = {1, 2, 3, 4, 5};
    std::cout << "mydeque backwards:";
    for (auto rit = mydeque.crbegin(); rit != mydeque.crend(); ++rit)
        std::cout << ' ' << *rit;
    std::cout << '\n';
    return 0;
}

出力結果

上記のプログラムを実行すると、以下のような出力が得られます。

mydeque backwards: 5 4 3 2 1

まとめ

deque::crbegin()は、dequeを逆順かつ読み取り専用で安全に走査したい場合に便利な関数です。誤って要素を変更してしまうバグを防ぎたいときや、constオブジェクトを扱う際には、rbegin()の代わりにcrbegin()を使うことが推奨されます。

  1. C++ STLのdeque::assign()関数の使い方を徹底解説

    本記事では、C++ STLにおける deque::assign() 関数の動作について詳しく解説します。デック(deque)は「double ended queue(両端キュー)」と呼ばれるデータ構造で、先頭と末尾の両方から要素の挿入・削除が可能なコンテナです。C++の deque::assign() は組み込み関数の一つで、dequeコンテナに新しい値を割り当てるために使用されます。この関数が呼び出されるたびに、既存の要素をすべて置き換えて新しい値を設定し、それに応じてコンテナのサイズも自動的に調整されます。構文deque::assign() の構文は以下の通りです。dequename.as

  2. C++のSTLを使ったDeque(両端キュー)の実装方法を解説

    両端キュー(Double Ended Queue、略称:Deque)は、キューの一種であり、先頭(front)と末尾(rear)の両端で要素の挿入・削除が行えるデータ構造です。通常のキューは片側から挿入し反対側から削除するだけですが、dequeは双方向からの操作に対応しているため、より柔軟なデータ管理が可能になります。 C++では、標準テンプレートライブラリ(STL)に <deque> ヘッダとして両端キューが標準搭載されているため、自前で実装しなくても手軽に利用できます。本記事では、STLのdequeを使用したメニュー形式の対話型プログラムを通じて、基本的な使い方を解説します。