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

【C++ STL入門】queue::emplace()関数の使い方と実例をわかりやすく解説

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

C++ STLにおけるキュー(queue)とは?

キューは、C++ STLで定義されているシンプルなシーケンスコンテナ(データ構造)の一つで、FIFO(First In First Out:先入れ先出し)方式でデータの挿入と削除を行います。キュー内のデータは連続的に保持され、要素は末尾に追加され、先頭から取り出される仕組みになっています。C++ STLにはあらかじめqueueのテンプレートが用意されており、通常のキューと同じ方式でデータを挿入・削除できます。

queue::emplace()とは何か?

queue::emplace()は、C++ STLに組み込まれた関数であり、ヘッダーファイル<queue>内で宣言されています。この関数は、キューコンテナに新しい要素を直接構築して挿入するために使用されます。キューの構造上、新しく挿入された要素は必ず末尾に追加されるため、emplace()は内部的にemplace_back()を呼び出すことで、キューコンテナの末尾への効率的な挿入を実現しています。

構文

myqueue.emplace(value_type &t);

この関数は1つのパラメータを受け取ります。それは、対応するキューコンテナに挿入する要素そのものです。

戻り値

この関数は戻り値を返しません(void型です)。

使用例

Input: queue<int> myqueue = {10, 20, 30, 40};
    myqueue.emplace(50);
Output:
    キューの要素 = 10 20 30 40 50

サンプルコード①:整数型のキュー

#include <iostream>
#include <queue>
using namespace std;
int main (){
    queue<int> Queue;
    Queue.emplace(10);
    Queue.emplace(20);
    Queue.emplace(30);
    Queue.emplace(40);
    Queue.emplace(50);
    cout<<"キューの要素: ";
    while(!Queue.empty()){
        cout << ' ' << Queue.front();
        Queue.pop();
    }
    return 0;
}

出力結果

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

Elements in Queue are: 10 20 30 40 50

サンプルコード②:文字列型のキュー

#include <iostream>
#include <queue>
using namespace std;
int main(){
    queue<string> Queue;
    Queue.emplace("Welcome");
    Queue.emplace("To");
    Queue.emplace("Tutorials");
    Queue.emplace("Point");
    cout<<"文字列: ";
    while (!Queue.empty()){
        cout << ' ' << Queue.front();
        Queue.pop();
    }
    return 0;
}

出力結果

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

String is : Welcome To Tutorials Point

まとめ

queue::emplace()は、キューの末尾に要素を効率的に追加するための便利な関数です。push()との大きな違いは、emplace()がコンテナ内で直接オブジェクトを構築する点にあります。これにより、一時オブジェクトの生成やコピーが不要になり、特に重いオブジェクトを扱う場合にはパフォーマンス面でのメリットが大きくなります。FIFO構造のキューを扱う際には、ぜひ活用してみてください。

  1. C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード

    C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。 スタックで使える主な操作 1. top() – 最上位要素の取得 スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。 構文:name_of_stack.top() 引数:なし 戻り値:ス

  2. C++ STL(標準テンプレートライブラリ)のプライオリティキュー徹底解説

    プライオリティキュー(優先度付きキュー)は、優先度を持つ要素のコレクションを格納するための抽象データ型(ADT)です。各要素は優先度に基づいて挿入・削除が行われ、最も優先度の高い要素はいつでも取り出すことができます。スタックやキュー、リストなどの線形データ構造とは異なり、プライオリティキューは要素を格納位置の順序ではなく、優先度に基づいて管理する点が大きな特徴です。C++では、STLの <queue> ヘッダで提供されており、デフォルトでは最大値が先頭に来る構造になっています。プライオリティキューがサポートする主な操作size() — プライオリティキュー内の要素数を返し、サイズを