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

【C++ STL】deque::operator=とdeque::operator[]の使い方を徹底解説

この記事では、C++ STLにおける deque::operator=deque::operator[] の働き、構文、具体的な使用例について詳しく解説します。

deque(両端キュー)とは?

dequeは「Double Ended Queue(両端キュー)」の略で、コンテナの先頭と末尾の両方で要素の挿入・削除ができるシーケンスコンテナです。
通常のキュー(queue)構造では、データの挿入は末尾からのみ、削除は先頭からのみしか行えません。バス停の行列を思い浮かべてください。人は列の末尾に並ぶことしかできず、先頭にいる人から順に乗車していきます。
これに対してdequeでは、データの挿入も削除も両端で自由に行えるのが最大の特徴です。

deque::operator= とは?

deque::operator= は、既存の内容を置き換える形で、別のdequeコンテナの値を代入するために使われる代入演算子です。
代入後は、右辺のコンテナと同じ内容になり、dequeのサイズも新しい値に合わせて自動的に調整されます。

構文

mydeque1 = mydeque2;

右辺には、同じ型の別のdequeコンテナを指定する必要があります。

戻り値

この演算子は、代入先のdequeコンテナ自身への参照(*this)を返します。

使用例

入力:
deque<int> odd = {1, 3, 5, 7};
deque<int> eve = {2, 4, 6};
odd = eve;

出力:
odd: 2, 4, 6
eve: 2, 4, 6

続いて、3つのdequeを組み合わせて中身を入れ替える実際のコードを見てみましょう。

#include <deque>
#include <iostream>
using namespace std;
int main(){
    deque<int> Deque_1 = { 10, 20, 30 };
    deque<int> Deque_2 = { 30, 20, 10 };
    deque<int> Deque_3 = {};
    // 一時的なDeque_3を介して、Deque_1とDeque_2の中身を入れ替える
    Deque_3 = Deque_2;
    Deque_2 = Deque_1;
    Deque_1 = Deque_3;
    cout << "Elements in Deque_1 are: ";
    for (auto i = Deque_1.begin(); i != Deque_1.end(); ++i)
        cout << ' ' << *i;
    cout << "\nElements in Deque_2 are: ";
    for (auto i = Deque_2.begin(); i != Deque_2.end(); ++i)
        cout << ' ' << *i;
    return 0;
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

Elements in Deque_1 are: 30 20 10
Elements in Deque_2 are: 10 20 30

deque::operator[] とは?

deque::operator[] は、指定した位置(インデックス)にある要素へアクセスするための添字演算子です。
この演算子は、[] 内に指定された位置にある要素への参照を返します。使い方は deque::at() とよく似ていますが、重要な違いがあります。
operator[] には境界チェックがありません。 有効範囲外の位置を指定した場合、at() では std::out_of_range 例外がスローされますが、operator[] の場合は動作が未定義になるため注意が必要です。
なお、deque内の要素位置(インデックス)は 0から 始まります。

構文

mydeque[position];

アクセスしたい要素の位置(インデックス)を指定します。

戻り値

指定された位置にある要素への直接参照を返します。

使用例

入力:
deque<int> mydeque = {1, 2, 3, 4, 5, 6};
mydeque[2];

出力:
3

続いて、operator[] を使って奇数番目のインデックス(1、3)の要素だけを取り出すコードを見てみましょう。

#include <deque>
#include <iostream>
using namespace std;
int main(){
    deque<int> Deque = {10, 20, 30, 40, 50};
    cout << "Elements are : ";
    for (int i = 0; i < Deque.size(); ++i){
        if (i % 2 != 0){
            cout << Deque[i];
            cout << " ";
        }
    }
    return 0;
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

Elements are : 20 40

まとめ

deque::operator= は、別のdequeの内容を丸ごと代入(コピー)したいときに便利な演算子です。一方、deque::operator[] は、特定の位置にある要素を読み書きしたいときに活躍します。ただし operator[] は境界チェックを行わないため、範囲外アクセスの危険性を避けたい場面では、例外を投げる at() の使用を検討するとよいでしょう。

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

    この記事では、C++ STLにおけるdeque(デック)のresize()関数の機能と具体的な使い方について、サンプルコードと実行結果を交えながら詳しく解説します。deque(両端キュー)とはdequeは「Double Ended Queue(両端キュー)」の略で、シーケンスコンテナの一種です。先頭と末尾の両端から要素の追加・削除ができる点が最大の特徴です。通常のキュー(queue)データ構造では、データの挿入は末尾からのみ行い、削除は先頭からのみ行います。バス停の行列をイメージすると分かりやすいでしょう。新しい人は列の末尾に並び、先頭にいる人から順に乗車して列から外れていきます。一方、deq

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

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