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

C++ STLのdeque::at()関数とdeque::swap()関数の使い方を解説

本記事では、C++ STLで提供されているdeque::at()関数deque::swap()関数について、それぞれの構文、動作、戻り値を詳しく解説します。

STLにおけるdeque::at()とdeque::swap()とは?

deque(Double Ended Queue:両端キュー)は、その名のとおり、両端から要素の追加・削除ができるシーケンスコンテナです。どちらの端からでも自由にデータを挿入・削除できます。dequeはvectorに似ていますが、vectorと異なり連続したメモリ領域への格納は保証されていない点が特徴です。その一方で、両端における要素の挿入・削除処理では、dequeの方がより高い効率を発揮します。

deque::at()とは

at()関数は、引数として指定した特定の位置に存在する要素への参照を取得するために使用します。

構文

dequename.at(要素の位置)

パラメータ

取得したい要素の位置(インデックス番号)を指定します。

戻り値

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

使用例

入力 : adeque = 1, 3, 4, 5, 8
adeque.at(3);
出力 : 5

入力 : adeque = 1, 3, 5, 7, 9
adeque.at(2);
出力 : 5

サンプルコード

#include <deque>
#include <iostream>
using namespace std;
int main(){
    deque<int> adeque;
    adeque.push_back(1);
    adeque.push_back(3);
    adeque.push_back(4);
    adeque.push_back(5);
    adeque.push_back(8);
    cout << adeque.at(3);
    return 0;
}

出力結果

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

5

補足:at()と[]演算子の違い

at()関数は、指定した位置が範囲外の場合にstd::out_of_range例外をスローします。一方、[]演算子は範囲チェックを行わないため、不正なアクセス時の動作は未定義です。安全に要素へアクセスしたい場合はat()の使用を推奨します。

deque::swap()とは

swap()関数は、同じ型・同じサイズの2つのdeque同士の内容を交換するために使用します。

構文

Deque1name.swap(deque2name)

パラメータ

引数には、呼び出し元のdequeの内容と交換する対象のdequeの名前を指定します。

戻り値

この関数には戻り値はありませんが、実行後は両方のdequeの全要素が入れ替わります。

使用例

入力 : adeque = {1, 3, 4, 5, 8}
       bdeque = {2, 6, 7, 9, 0}

adeque.swap(bdeque);

出力 : adeque = {2, 6, 7, 9, 0}
       bdeque = {1, 3, 4, 5, 8}

サンプルコード

#include <deque>
#include <iostream>
using namespace std;
int main(){
    // dequeコンテナの宣言
    deque<int> adeque{ 1, 2, 3, 4 };
    deque<int> bdeque{ 3, 5, 7, 9 };

    // swap()関数で2つのdequeの要素を交換
    adeque.swap(bdeque);

    // adequeの要素を出力
    cout << "adeque = ";
    for (auto it = adeque.begin(); it < adeque.end(); ++it)
        cout << *it << " ";

    // bdequeの要素を出力
    cout << endl << "bdeque = ";
    for (auto it = bdeque.begin(); it < bdeque.end(); ++it)
        cout << *it << " ";

    return 0;
}

出力結果

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

adeque = 3 5 7 9
bdeque = 1 2 3 4

まとめ

deque::at()は指定位置の要素へ安全にアクセスでき、deque::swap()は2つのdequeの中身を効率よく一括交換できる便利な関数です。特にswap()は内部ポインタのみを入れ替えるため高速であり、大量のデータを扱う場合にも有効です。

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

    C++ STLにおけるdequeのpush_back()関数の機能と具体的な使い方について、構文やパラメータ、サンプルコードを交えながら詳しく解説します。 deque(デック)とは dequeは「Double Ended Queue(両端キュー)」の略称で、コンテナの両端から要素の追加・削除が可能なシーケンスコンテナです。 通常のキュー(queue)データ構造では、データの挿入は末尾からのみ、削除は先頭からのみ行えます。バス停の行列をイメージすると分かりやすいでしょう。行列に人は末尾からしか加わらず、先頭にいる人から順番に乗車していきます。一方、dequeではこの挿入と削除が両端のどちらからで

  2. C++ STLのarray::fill()とarray::swap()の使い方をサンプルコード付きで解説

    はじめにC++のSTL(Standard Template Library)には、固定長配列を扱うためのstd::arrayコンテナが用意されています。本記事では、そのメンバ関数であるarray::fill()とarray::swap()の役割と具体的な使い方を、サンプルコードと実行結果をもとにわかりやすく解説します。array::fill() ― 配列を指定した値で満たすarray::fill()は、配列のすべての要素を引数で指定した値で一括して上書きする関数です。配列全体を同じ値で初期化したい場合や、値をリセットしたい場合に非常に便利です。まず、配列の現在の要素を出力し、その後fill(5