C++ STLのdeque emplace_front()とemplace_back()関数の使い方を解説
C++ STLにおけるdeque(両端キュー)のemplace_front()関数とemplace_back()関数の機能を、サンプルコードと実行結果とともにわかりやすく解説します。
Deque(両端キュー)とは
Deque(デック)は「Double Ended Queue(両端キュー)」の略で、シーケンスコンテナの一種です。最大の特徴は、コンテナの先頭と末尾の両方で要素の追加・削除ができる点にあります。
通常のキュー(queue)データ構造では、データの挿入は末尾からのみ、削除は先頭からのみ行えます。バス停の行列をイメージすると分かりやすいでしょう。新しい人は列の末尾に並び、先頭にいる人から順に乗車して列から外れていきます。一方、両端キューでは、先頭と末尾のどちらからでもデータの挿入と削除が可能です。
emplace_front()関数とは
emplace_front()関数は、dequeの先頭に新しい要素を挿入するメンバ関数です。push_front()と似ていますが、emplace系の関数は要素をコンテナ内で直接構築(in-place構築)できるため、一時オブジェクトの生成やコピー・ムーブのコストを抑えられる点がメリットです。
構文
dequename.emplace_front(value)
パラメータ
value − dequeの先頭に挿入する新しい要素を指定します。要素のデータ型は、dequeの宣言時に指定した型と一致している必要があります。
使用例
入力 Deque − 12 13 14 15 16
出力 New Deque − 11 12 13 14 15 16
入力 Deque − O R C E
出力 New Deque − F O R C E
処理の手順
- まず、dequeを宣言して初期化します。
- 初期状態のdequeを表示します。
emplace_front()関数を呼び出し、先頭に新しい要素を挿入します。- 挿入後の新しいdequeを表示します。
この手順に従うことで、dequeの先頭に新しい要素を追加できます。関数を呼び出す際は、挿入したい新しい要素を引数として渡します。新しい要素のデータ型は、dequeの要素型と同じでなければなりません。
サンプルコード(emplace_front)
// deque emplace_front()関数の動作を示すC++コード
#include <iostream>
#include <deque>
using namespace std;
int main() {
// dequeの初期化
deque<int> deq = { 85, 87, 88, 89, 90 };
// dequeの表示
cout << "Deque: ";
for (auto x = deq.begin(); x != deq.end(); ++x)
cout << *x << " ";
// emplace_front()で先頭に78を挿入
deq.emplace_front(78);
// 挿入後のdequeを表示
cout << "\nNew Deque: ";
for (auto x = deq.begin(); x != deq.end(); ++x)
cout << " " << *x;
return 0;
}
出力結果
上記のコードを実行すると、次のような出力が得られます。
入力 - Deque: 85 87 88 89 90 出力 - New Deque: 78 85 87 88 89 90
emplace_back()関数とは
emplace_back()関数は、emplace_front()と対をなす関数で、dequeの末尾に新しい要素を挿入します。使い方はemplace_front()とほぼ同じです。
構文
dequename.emplace_back(value)
サンプルコード(emplace_back)
// deque emplace_back()関数の動作を示すC++コード
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> deq = { 85, 87, 88, 89, 90 };
// 末尾に91を挿入
deq.emplace_back(91);
cout << "New Deque: ";
for (auto x = deq.begin(); x != deq.end(); ++x)
cout << *x << " ";
return 0;
}
出力結果
出力 - New Deque: 85 87 88 89 90 91
まとめ
emplace_front()はdequeの先頭に、emplace_back()は末尾に新しい要素を直接構築して追加する関数です。push_front()やpush_back()との主な違いは、要素をコンテナ内で直接構築できる点にあり、特にコピーコストの大きいオブジェクトを扱う場合にパフォーマンス面で有利になります。両端への柔軟な要素追加が必要な場面で、ぜひ活用してみてください。
-
C++ STLのforward_list::emplace_after()とemplace_front()の使い方を徹底解説
本記事では、C++におけるforward_list::emplace_after()とforward_list::emplace_front()関数の動作について詳しく解説します。 forward_listは、前後双方向に走査できる通常のリスト(std::list)とは異なり、次の要素とのリンクのみを保持する片方向リンクリストです。そのため前方方向にしかイテレーションできませんが、その分メモリ効率に優れています。 forward_list::emplace_after()とforward_list::emplace_front()はC++標準ライブラリの一部であり、利用するには<forw
-
C++ STLのdeque::assign()関数の使い方を徹底解説
本記事では、C++ STLにおける deque::assign() 関数の動作について詳しく解説します。デック(deque)は「double ended queue(両端キュー)」と呼ばれるデータ構造で、先頭と末尾の両方から要素の挿入・削除が可能なコンテナです。C++の deque::assign() は組み込み関数の一つで、dequeコンテナに新しい値を割り当てるために使用されます。この関数が呼び出されるたびに、既存の要素をすべて置き換えて新しい値を設定し、それに応じてコンテナのサイズも自動的に調整されます。構文deque::assign() の構文は以下の通りです。dequename.as