logo

C++ 標準テンプレート ライブラリ (STL)

標準テンプレート ライブラリ (STL) は、リスト、スタック、配列などの一般的なプログラミング データ構造と関数を提供する C++ テンプレート クラスのセットです。これは、コンテナ クラス、アルゴリズム、イテレータのライブラリです。これは一般化されたライブラリであるため、そのコンポーネントはパラメータ化されています。実用的な知識 テンプレートクラス STL を使用するための前提条件です。

C++ 標準テンプレート ライブラリ (STL) は、C++ プログラムの開発を簡素化するために使用できるアルゴリズム、データ構造、およびその他のコンポーネントのコレクションです。 STL は、ベクトル、リスト、マップなどのさまざまなコンテナーと、データの検索、並べ替え、操作のためのアルゴリズムを提供します。



STL の主な利点の 1 つは、さまざまなデータ型に適用できる汎用の再利用可能なコードを作成する方法を提供することです。これは、アルゴリズムを一度作成すれば、タイプごとに個別のコードを記述することなく、それをさまざまなタイプのデータで使用できることを意味します。

STL は、効率的なコードを作成する方法も提供します。 STL のアルゴリズムとデータ構造の多くは、最適化されたアルゴリズムを使用して実装されているため、カスタム コードと比較して実行時間が短縮されます。

シュレヤ・ゴーシャルの最初の夫

STL の主要なコンポーネントには次のようなものがあります。

  1. コンテナ: STL は、データの保存と操作に使用できる、ベクター、リスト、マップ、セット、スタックなどのさまざまなコンテナを提供します。
  2. アルゴリズム: STL は、コンテナーに格納されたデータを操作するために使用できる、sort、find、binary_search などの一連のアルゴリズムを提供します。
  3. イテレータ: イテレータは、コンテナの要素を横断する方法を提供するオブジェクトです。 STL は、さまざまなタイプのコンテナーで使用できる、forward_iterator、bidirection_iterator、random_access_iterator などの一連のイテレーターを提供します。
  4. 関数オブジェクト: ファンクターとも呼ばれる関数オブジェクトは、アルゴリズムの関数引数として使用できるオブジェクトです。これらは関数をアルゴリズムに渡す方法を提供し、その動作をカスタマイズできるようにします。
  5. アダプター: アダプターは、STL 内の他のコンポーネントの動作を変更するコンポーネントです。たとえば、 reverse_iterator アダプターを使用すると、コンテナー内の要素の順序を逆にすることができます。

STL を使用すると、コードを簡素化し、エラーの可能性を減らし、プログラムのパフォーマンスを向上させることができます。



STL には 4 つのコンポーネントがあります。

    アルゴリズム コンテナ ファンクタ イテレータ

1. アルゴリズム

ヘッダー アルゴリズムは、さまざまな要素で使用するために特別に設計された関数のコレクションを定義します。これらはコンテナに作用し、コンテナの内容に対するさまざまな操作の手段を提供します。

  • アルゴリズム
    • 仕分け
    • 検索中
    • 重要な STL アルゴリズム
    • 便利な配列アルゴリズム
    • パーティション操作
  • 数値
    • valarray クラス

2. コンテナ

コンテナまたはコンテナ クラスは、オブジェクトとデータを保存します。合計 7 つの標準ファーストクラス コンテナ クラスと 3 つのコンテナ アダプタ クラスがあり、これらのコンテナまたはコンテナ アダプタへのアクセスを提供するヘッダー ファイルは 7 つだけです。



  • シーケンス コンテナ: 順次アクセスできるデータ構造を実装します。
  • コンテナ アダプタ: 順次コンテナに異なるインターフェイスを提供します。
  • 連想コンテナ: 迅速に検索できるソートされたデータ構造を実装します (複雑さ O(log n))。
  • 順序なし連想コンテナ: 迅速に検索できる順序なしのデータ構造を実装します。
    • unowned_set (C++11 で導入)
    • unowned_multiset (C++11 で導入)
    • 順序なしマップ (C++11で導入)
    • unowned_multimap (C++11 で導入)

アダプティブコンテナとアンオーダードコンテナのフローチャート シーケンスコンテナとオーダーコンテナのフローチャート

3. ファンクター

STL には、関数呼び出し演算子をオーバーロードするクラスが含まれています。このようなクラスのインスタンスは、関数オブジェクトまたはファンクターと呼ばれます。ファンクターを使用すると、渡されるパラメーターを使用して、関連する関数の動作をカスタマイズできます。 必読 – ファンクター

4. イテレータ

名前が示すように、イテレータは一連の値を処理するために使用されます。これらはSTLの汎用性を可能にする大きな特徴です。 必読イテレータ

ユーティリティライブラリ

header で定義されます。 必読C++ STL でのペアリング

詳細については、を参照してください。 STLに関する最近の記事!

C++ 標準テンプレート ライブラリ (STL) の利点:

  1. 再利用性: STL の主な利点の 1 つは、さまざまなデータ型に適用できる汎用の再利用可能なコードを作成する方法を提供することです。これにより、コードがより効率的で保守しやすくなります。
  2. 効率的なアルゴリズム: STL のアルゴリズムとデータ構造の多くは、最適化されたアルゴリズムを使用して実装されているため、カスタム コードと比較して実行時間が短縮されます。
  3. コードの可読性の向上: STL は、データを操作するための一貫した十分に文書化された方法を提供するため、コードの理解と保守が容易になります。
  4. 大規模なユーザー コミュニティ: STL は広く使用されています。つまり、チュートリアルやフォーラムなどのサポートやリソースを提供できる開発者の大規模なコミュニティが存在します。

C++ 標準テンプレート ライブラリ (STL) の欠点:

  1. 学習曲線: STL は、構文が複雑で、イテレータや関数オブジェクトなどの高度な機能を使用しているため、特に初心者にとっては学習が難しい場合があります。
  2. 制御の欠如: STL を使用する場合、ライブラリによって提供される実装に依存する必要があるため、コードの特定の側面に対する制御が制限される可能性があります。
  3. パフォーマンス: 場合によっては、特に少量のデータを処理する場合、STL を使用するとカスタム コードと比較して実行時間が遅くなることがあります。