C++ STLのstack::emplace()関数とは?構文と使い方を実例で解説
本記事では、C++ STLにおけるstack::emplace()関数の動作、構文、および具体的な使用例について詳しく解説します。
C++ STLにおけるスタック(Stack)とは?
スタックはLIFO(Last In First Out:後入れ先出し)方式でデータを格納するデータ構造です。挿入と削除は、最後に挿入された要素の位置である「トップ」から行います。皿を積み重ねる様子をイメージすると分かりやすいでしょう。新しい皿を追加するときは一番上に置き、取り出すときも一番上から取ります。
stack::emplace()とは何か
stack::emplace()は、C++ STLに組み込まれた関数であり、<stack>ヘッダーファイル内で定義されています。この関数は、呼び出し元のスタックコンテナに対して、新しい要素をその場で直接構築して挿入するために使用されます。
この関数が実行されると、新しい要素がスタックのトップに挿入され、その新しく挿入された要素がトップ要素となります。内部的にはemplace_backを呼び出すことで、新しい要素をトップに追加しています。
push()との主な違いは、emplace()が引数を受け取ってオブジェクトを直接構築できる点です。これにより、一時オブジェクトの生成やコピー・ムーブのコストを削減でき、パフォーマンス面で有利になる場合があります。
構文
stack_name.emplace(Args& args);
パラメータ
この関数は以下のパラメータを受け取ります。
args − スタックに挿入したい要素を構築するための引数です。
戻り値
この関数は戻り値を返しません(void型)。
入力例
std::stack<int> stack1; stack1.emplace(1); stack1.emplace(2); stack1.emplace(3);
出力結果
3 2 1
使用例1:基本的な使い方
#include <iostream>
#include <stack>
using namespace std;
int main(){
stack<int> stck;
stck.emplace(10);
stck.emplace(20);
stck.emplace(30);
stck.emplace(40);
stck.emplace(50);
stck.emplace(60);
cout << "Elements in stack are: ";
while (!stck.empty()){
cout<<stck.top() << " ";
stck.pop();
}
return 0;
}出力結果
上記のコードを実行すると、次の出力が生成されます。
Elements in stack are: 60 50 40 30 20 10
このように、後に入れた要素ほど先に出力されるため、LIFOの特性が確認できます。
使用例2:要素数のカウント
#include <iostream>
#include <stack>
using namespace std;
int main(){
stack<int> stck;
int total = 0;
stck.emplace(10);
stck.emplace(20);
stck.emplace(30);
stck.emplace(40);
stck.emplace(50);
stck.emplace(60);
cout << "Elements in stack are: ";
while (!stck.empty()){
cout<<stck.top() << " ";
stck.pop();
total++;
}
cout<<"\nTotal number of elements in stack are: "<<total;
return 0;
}出力結果
上記のコードを実行すると、次の出力が生成されます。
Elements in stack are: 60 50 40 30 20 10 Total number of elements in stack are: 6
まとめ
stack::emplace()は、スタックのトップに新しい要素を直接構築して挿入するための便利な関数です。push()と同様の役割を果たしつつ、オブジェクトの構築をその場で行えるため、特に大きなオブジェクトや複雑な型を扱う際に効率的です。C++でスタックを操作する際には、ぜひ活用してみてください。
-
C++ STL入門:setとunordered_setの違いを徹底解説
本記事では、C++ STLにおける set と unordered_set の概要をわかりやすく解説し、両者の違いについても詳しく学んでいきます。 setとは? set(セット)は、Key型の一意なオブジェクトをソート済みの状態で格納する連想コンテナです。各要素は一度しか出現できず、重複した値は許されません。ユーザーは任意の順序で要素を挿入してsetを作成できますが、setは常にソートされた形でデータを返します。つまり、setにはデータを並べ替えるための仕組みが内部に組み込まれており、その処理はユーザーから抽象化されています。 setを使うべき主なケースは以下の通りです。 ソート済みのデ
-
C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード
C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。 スタックで使える主な操作 1. top() – 最上位要素の取得 スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。 構文:name_of_stack.top() 引数:なし 戻り値:ス