C++ コンテナ<forward_list>

C++ 標準ライブラリの<forward_list>は、単方向リンクリストのデータ構造を提供するコンテナの一種です。

双方向リンクリスト(std::list)と異なり、std::forward_list単方向の走査のみをサポートします。前方への走査や挿入・削除操作を頻繁に行う必要がある場面に適しています。以下は、std::forward_listの詳細な説明です:

単方向リンクリスト:

  • std::forward_listは単方向リンクリストであり、前から後ろへの走査のみ可能で、逆方向には走査できません。
  • 単方向リンクリストの構造により、位置が既知の場合、挿入および削除操作は非常に効率的です(O(1) の複雑さ)。

低メモリオーバーヘッド:

  • とstd::listと比較すると、std::forward_listは次のノードを指すポインタのみを必要とするため、メモリを節約します。

ランダムアクセス非対応:

  • インデックスによる要素へのアクセスはサポートされておらず、operator[] 或 atメソッドは使用できません。イテレータを介してのみアクセスできます。

構文

std::forward_listは C++ 標準ライブラリ内のテンプレートクラスであり、<forward_list>ヘッダファイルに定義されています。テンプレートパラメータTを使用して、リストに格納される要素の型を指定します。

以下はstd::forward_listの基本的な構文です:

#include <forward_list>

std::forward_list<T> list;

コンストラクタ

std::forward_list以下のような複数のコンストラクタが提供されています:

  • デフォルトコンストラクタ:空のforward_list。
  • 初期値付きコンストラクタ:指定された初期値を含むforward_list。
  • 範囲コンストラクタ:指定された範囲内の要素を含むforward_list。

一般的なメンバ関数

  • void push_front(const T& value):リストの先頭に要素を挿入します。
  • void pop_front():リストの先頭の要素を削除します。
  • iterator before_begin():リストの先頭の前を指すイテレータを返します。
  • iterator begin():リストの先頭を指すイテレータを返します。
  • iterator end():リストの末尾を指すイテレータを返します。

例

次に、std::forward_listを使用した簡単な例を示します。リストの作成、要素の追加、リストの走査、結果の出力を含みます。

例

#include <iostream>
#include <forward_list>

int main() {
    // 空の forward_list を作成
    std::forward_list<int> fl;

    // リストの先頭に要素を追加
    fl.push_front(10);
    fl.push_front(20);
    fl.push_front(30);

    // forward_list を走査して要素を出力
    for (auto it = fl.begin(); it != fl.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    // 出力結果:30 20 10

    return 0;
}

上記のコードを実行すると、次の出力が表示されます:

30 20 10

std::forward_listは C++ 標準ライブラリの中でも非常に便利なコンテナであり、特にリストの先頭での頻繁な挿入・削除操作が必要な場面に適しています。ランダムアクセスには対応していませんが、状況によってはそのパフォーマンス上の利点がこの欠点を補います。この記事が初心者の方の理解と使用に役立つことを願っています。std::forward_list。

その他の拡張