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

【C++ STL入門】deque::at()とdeque::swap()の使い方を徹底解説

本記事では、C++ STLにおける deque::at()deque::swap() の動作原理、構文、そして具体的な使用例について詳しく解説します。

deque(デック)とは?

deque(Double Ended Queue:両端キュー)は、シーケンスコンテナの一種で、両端(先頭と末尾)のどちらからでも要素の挿入・削除を行えるコンテナです。通常のキュー(待ち行列)データ構造では、データの挿入は末尾からのみ、削除は先頭からのみ行えます。バス停の行列を想像すると分かりやすいでしょう。人は列の末尾にしか並べず、列の先頭にいる人から順に乗車します。一方、両端キュー(deque)では、先頭と末尾の両方からデータの挿入・削除が可能です。

deque::at() とは?

deque::at() はC++ STLに組み込まれた関数で、<deque> ヘッダファイルで宣言されています。この関数は、deque内の指定された位置にある要素への参照を返します。引数として渡された位置にある要素にアクセスでき、位置の指定は 0から始まる 点に注意してください。

構文

mydeque.at(int position);

パラメータ

この関数は、アクセスしたい要素の位置を表す1つの引数を受け取ります。

戻り値

dequeコンテナ内の指定位置にある要素への参照を返します。

使用例

Input: deque<int> mydeque = {10, 20, 30, 40};
mydeque.at(2);

出力

位置2にある要素は 30

サンプルコード

#include <deque>
#include <iostream>
using namespace std;
int main(){
    deque<int> myDeque;
    myDeque.push_back(90);
    myDeque.push_back(80);
    myDeque.push_back(70);
    myDeque.push_back(60);
    myDeque.push_back(50);
    myDeque.push_back(40);
    myDeque.push_back(30);
    myDeque.push_back(20);
    myDeque.push_back(10);
    for (int i = 0; i < myDeque.size(); ++i){
       if (i % 2 == 0){
          cout << myDeque.at(i);
          cout << " ";
       }
    }
    return 0;
}

出力結果

上記のコードを実行すると、以下の出力が生成されます。

90 70 50 30 10

このコードでは、偶数番目(0、2、4…)の位置にある要素だけを at() を使って取り出して表示しています。

deque::swap() とは?

deque::swap() もまた、<deque> ヘッダファイルで宣言されているC++ STLの組み込み関数です。この関数は、あるdequeコンテナの中身を別のdequeコンテナと入れ替える(交換する)ために使用します。引数には、中身を交換したい相手となる別のdequeコンテナのオブジェクトを渡します。

構文

mydeque1.swap(type_t& mydeque2);

パラメータ

この関数は、中身を交換したい対象のdequeへの参照という1つの引数を受け取ります。

戻り値

何も返しません(void)。

使用例

Input: deque<int> even = {2, 4, 6, 8};
deque<int> odd = {1, 3, 5, 7};
even.swap(odd);
Output:
Even deque: 1 3 5 7
Odd deque: 2 4 6 8

サンプルコード

#include <deque>
#include <iostream>
using namespace std;
int main(){
    deque<int> Deque_1 = { 1, 2, 3, 4 };
    deque<int> Deque_2 = { 3, 5, 7, 9 };
    Deque_1.swap(Deque_2);
    cout<<"Deque_1 elements after swapping : ";
    for (auto i = Deque_1.begin(); i< Deque_1.end(); ++i)
    cout << *i << " ";
    cout << endl<<"Deque_2 elements after swapping : ";
    for (auto i = Deque_2.begin(); i<Deque_2.end(); ++i)
    cout << *i << " ";
    return 0;
}

出力結果

上記のコードを実行すると、以下の出力が生成されます。

Deque_1 elements after swapping : 3 5 7 9
Deque_2 elements after swapping : 1 2 3 4

swap() を呼び出した後、Deque_1Deque_2 の中身が完全に入れ替わっていることが確認できます。なお、swap() は要素を1つずつコピーするのではなく、内部ポインタを交換するだけで処理されるため、非常に高速に動作する点も大きなメリットです。

  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