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

【C++】STLのlistにおけるpush_front()関数の使い方を徹底解説


本記事では、C++のpush_front()関数の仕組み、構文、そして具体的な使用例について詳しく解説します。

STLにおけるlistとは

listは、シーケンス内の任意の位置に対して定数時間での挿入・削除を可能にするデータ構造です。listは双方向連結リスト(doubly linked list)として実装されており、非連続的なメモリ割り当てが可能です。

配列やvector、dequeと比較すると、listはコンテナ内の任意の位置への要素の挿入・抽出・移動において優れたパフォーマンスを発揮します。一方で、要素への直接アクセス(ランダムアクセス)は遅いという特徴があります。また、listはforward_listとよく似ていますが、forward_listは単方向連結リストであり、前方方向にしかイテレートできない点が異なります。

push_front()とは

push_front()はC++ STLに組み込まれている関数で、ヘッダーファイル<list>内で宣言されています。この関数は、listコンテナの先頭に要素を追加(挿入)するために使用されます。

コンテナが空の場合は、渡された要素が最初の位置に配置され、その要素が先頭要素となります。すでに要素が存在する場合は、新しい要素が先頭に追加され、それまで先頭にあった要素は2番目の要素へと移動します。この関数を呼び出すたびに、コンテナのサイズは1ずつ増加します。

構文

void push_front (const value_type& element1);
void push_front (value_type&& element1);
// 引数には、追加・挿入したい要素を1つだけ指定します。

戻り値

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

使用例1:push_back()との組み合わせ

#include <bits/stdc++.h>
using namespace std;
int main(){
    // リストを作成
    list<int> myList;
    // 要素を挿入
    myList.push_back(1);
    myList.push_back(2);
    myList.push_back(3);
    myList.push_back(4);
    // push_front()適用前のリストを表示
    cout<<"List : ";
    for (auto i = myList.begin(); i!= myList.end(); i++)
        cout << *i << " ";
    // push_front()を呼び出し
    myList.push_front(0);
    cout<<"\nList after calling push_front() : ";
    for (auto i = myList.begin(); i!= myList.end(); i++)
        cout << *i << " ";
    return 0;
}

出力結果

上記のコードを実行すると、以下のような出力が得られます。

List : 1 2 3 4
List after calling push_front(): 0 1 2 3 4

この例では、まずpush_back()を使って末尾から1〜4の要素を追加しています。その後push_front(0)を呼び出すことで、値0がリストの先頭に挿入され、すべての既存要素が一つ後ろにずれることが確認できます。

使用例2:初期化済みリストへの挿入

#include <iostream>
#include <list>
int main (){
    // 値30を持つ整数を2つ格納して初期化
    std::list<int> myList (2,30);
    myList.push_front (20);
    myList.push_front (10);
    std::cout<<"elements in my list are : ";
    for (std::list<int>::iterator i = myList.begin(); i!= myList.end(); ++i)
        std::cout << ' ' << *i;
    std::cout << '\n';
    return 0;
}

出力結果

上記のコードを実行すると、以下のような出力が得られます。

Elements in my list are : 10 20 30 30

この例では、リストを初期化した時点で値30が2つ格納されています。続いてpush_front(20)push_front(10)の順に呼び出しているため、後から追加した10が最終的に先頭に来るという点に注目してください。push_front()は常に現在の先頭に要素を追加するため、複数回呼び出した場合は最後に追加した要素が先頭になります。

まとめ

push_front()は、listコンテナの先頭に要素を定数時間O(1)で挿入できる便利な関数です。双方向連結リストであるlistの特性を活かした関数であり、先頭への頻繁な追加が必要な場面でvectorなどよりも高いパフォーマンスを発揮します。ただし、ランダムアクセスが苦手というlistの特性も理解した上で、用途に応じて適切なコンテナを選択することが重要です。

  1. C++ STLのlist::reverse()関数の使い方と実例解説

    本記事では、C++におけるlist::reverse()関数の動作、構文、具体的な使用例について詳しく解説します。STLにおけるlistとはlistは、シーケンス内の任意の位置で定数時間O(1)での要素の挿入・削除を可能にするデータ構造です。listは双方向連結リストとして実装されており、メモリの非連続的な割り当てが可能です。配列、vector、dequeと比較すると、コンテナ内の任意の位置への要素の挿入・抽出・移動において優れたパフォーマンスを発揮します。一方で、要素への直接アクセス(ランダムアクセス)は遅いという特徴があります。listはforward_listと似ていますが、forwar

  2. C++STLのlist back()関数の使い方を解説

    C++のlist back()関数とは本記事では、C++におけるlist back()関数の動作について詳しく解説します。list::back()関数は、C++標準テンプレートライブラリ(STL)の一部であり、リストの最後(末尾)の要素を取得・表示するために使用されます。この関数を呼び出す前に、必ず<list>ヘッダーファイルをインクルードする必要がある点に注意してください。構文List_Name.back();パラメータこの関数は、いかなるパラメータも受け取りません。戻り値この関数は、リストの最後の要素の値を返します。なお、リストが空の場合の動作は未定義となるため、呼び出し前にリ