C++ STLのlist emplace()関数の使い方を徹底解説
本記事では、C++におけるlist emplace()関数の動作について詳しく解説します。
list::emplace()関数は、C++標準テンプレートライブラリ(STL)の一部であり、ユーザーが指定した位置にリストへ新しい要素を挿入するために使用されます。
この関数を呼び出すには、<list>ヘッダーファイルをインクルードする必要があります。
構文
List_Name.emplace(position, element)
パラメータ
この関数は、以下の2つのパラメータを受け取ります。
1つ目はposition(位置)で、新しい要素を挿入する位置を表します。2つ目はelement(要素)で、指定した位置にリストへ挿入する値を表します。
戻り値
この関数は、新しく挿入された要素を指すイテレータを返します。
使用例
入力: list<int> L = { 1, 2, 3 }
出力: 6 1 2 3説明:ここでは、int型のリスト「L」を作成し、値として1、2、3を格納しています。emplace関数はイテレータを返すため、その戻り値を受け取るオブジェクト「itr」を作成します。第1引数には新しい要素を配置する位置としてリストの先頭を指定し、第2引数には追加する要素として6を渡しています。その結果、「6 1 2 3」という出力が得られます。
プログラムで使用するアプローチ
- まず、int型のリスト(例:「Lt」)を作成し、いくつかの値で初期化します。
- 次に、auto型のオブジェクト「itr」を作成し、emplace関数の呼び出し結果で初期化します。「itr」はemplace()関数の戻り値を受け取るイテレータとして機能します。
- そして、関数に引数を渡します。第1引数には挿入位置(例:Lt.begin()で先頭、Lt.end()で末尾)を指定し、第2引数には挿入する値(例:7)を指定します。
アルゴリズム
開始
ステップ1→ main() 関数内で
list<int> Lt = {} を初期化
auto itr = Lt.emplace(Lt.end(), 7) を初期化
ループ: itr = Lt.begin() から itr != Lt.end() まで itr++ を繰り返す
*itr を出力
終了サンプルコード
#include <iostream>
#include<list>
using namespace std;
int main() {
list<int> Lt = { 3,4,5 };
auto itr = Lt.emplace(Lt.begin(),7);
Lt.emplace(itr,6);
cout << "The List is: ";
for (itr = Lt.begin(); itr != Lt.end(); itr++)
cout << *itr << " ";
return 0;
}出力
上記のコードを実行すると、以下の出力が生成されます。
The List is: 6 7 3 4 5
emplace()とinsert()の違い
listには似た機能を持つinsert()関数もありますが、emplace()は挿入位置で要素を直接構築(in-place構築)できる点が大きな特徴です。これにより、一時オブジェクトの生成やコピーが発生せず、特に大きなオブジェクトや複雑な型を扱う場合にパフォーマンス面で有利になります。単純なint型などの基本的な型では差はほとんどありませんが、効率的なコードを書く上でemplace()は有用な選択肢となります。
-
C++ STLのlist::reverse()関数の使い方と実例解説
本記事では、C++におけるlist::reverse()関数の動作、構文、具体的な使用例について詳しく解説します。STLにおけるlistとはlistは、シーケンス内の任意の位置で定数時間O(1)での要素の挿入・削除を可能にするデータ構造です。listは双方向連結リストとして実装されており、メモリの非連続的な割り当てが可能です。配列、vector、dequeと比較すると、コンテナ内の任意の位置への要素の挿入・抽出・移動において優れたパフォーマンスを発揮します。一方で、要素への直接アクセス(ランダムアクセス)は遅いという特徴があります。listはforward_listと似ていますが、forwar
-
C++STLのlist back()関数の使い方を解説
C++のlist back()関数とは本記事では、C++におけるlist back()関数の動作について詳しく解説します。list::back()関数は、C++標準テンプレートライブラリ(STL)の一部であり、リストの最後(末尾)の要素を取得・表示するために使用されます。この関数を呼び出す前に、必ず<list>ヘッダーファイルをインクルードする必要がある点に注意してください。構文List_Name.back();パラメータこの関数は、いかなるパラメータも受け取りません。戻り値この関数は、リストの最後の要素の値を返します。なお、リストが空の場合の動作は未定義となるため、呼び出し前にリ