C ++のSTL:知っておくべきことすべて



この記事では、C ++でのSTLの詳細で包括的な知識を提供し、さまざまなコンテナーについてのアイデアも提供します。

標準テンプレートライブラリ(STL)は、リスト、スタック、配列などの一般的なプログラミングデータ構造と関数を提供するC ++テンプレートクラスのセットです。このC ++のSTLの記事では、次のポインタについて説明します。

C ++でのSTLに関するこの記事に進む





C ++テンプレート

C ++は、関数とクラスがジェネリック型で動作できるようにするテンプレートの機能を提供します。これにより、関数またはクラスの再利用が可能になり、それぞれごとに書き直すことなく、さまざまなデータ型で機能できるようになります。

C ++でのSTLに関するこの記事に進む



ジェネリック関数とSTL

プログラミングを何度も行う一方で、同じ操作を実行するが異なるデータ型で機能する関数を作成する必要があります。したがって、この問題を克服するために、C ++は、テンプレートパラメーターを使用してさまざまなデータ型で機能できる多くの関数ではなく、単一の汎用関数を作成する機能を提供します。これらの一般的なクラスと関数のコレクションは、標準テンプレートライブラリ(STL)と呼ばれます。

現在標準C ++ライブラリの一部となっているSTLのコンポーネントは、名前空間stdで定義されています。したがって、using名前空間ディレクティブを使用してそれらをプログラムにインポートする必要があります。

構文:



名前空間stdの使用

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

  • コンテナ

  • アルゴリズム

  • イテレータ

これらの3つのコンポーネントは、相乗効果で相互に連携して、さまざまなプログラミングソリューションをサポートします。アルゴリズムはイテレータを使用して、コンテナに格納されている操作を実行します。

コンテナは、データをメモリに整理された方法で格納するオブジェクトです。 STLのコンテナはテンプレートクラスによって実装されるため、さまざまなタイプのデータを保持するように簡単に変更およびカスタマイズできます。

コンテナに含まれるデータを処理するために使用されるプロシージャは、アルゴリズムとして定義されています。 STLには、初期化、検索、コピー、並べ替え、マージ、コピー、並べ替え、マージなどのタスクをサポートするためのさまざまな種類のアルゴリズムが含まれています。アルゴリズムはテンプレート関数によって実装されます。

イテレータは、コンテナ内の要素を指すオブジェクトとして定義できます。イテレータを使用して、コンテナの内容を移動できます。イテレータはポインタと同じように扱われます。それらをインクリメントまたはデクリメントできます。イテレータはアルゴリズムをコンテナに接続し、コンテナに格納されているデータの操作で重要な役割を果たします。

Container-STL-in-C++

C ++でのSTLに関するこの記事に進む

コンテナ

STLは、3つのカテゴリにグループ化された10個のコンテナを定義します。

コンテナ

説明

ヘッダーファイル

イテレータ

ベクター

動的配列として定義できます。任意の要素への直接アクセスを許可します。

ランダムアクセス

リスト

双方向の線形リストです。それはどこにでも挿入と削除を可能にします

双方向

そして

これは両端キューです。両端での挿入と削除を許可します。任意の要素への直接アクセスを許可します。

ランダムアクセス

セットする

一意のセットを格納するための関連コンテナです。迅速な検索を可能にします。

双方向

マルチセット

これは、一意でないセットを格納するための関連コンテナーです。

双方向

地図

Javaでのパッケージの使用

これは、一意のキーと値のペアを格納するための関連コンテナです。各キーは1つの値にのみ関連付けられています。

双方向

マルチマップ

これは、1つのキーが複数の値に関連付けられる可能性のあるキー/値を格納するための関連コンテナーです(1対多のマッピング)。キーベースのルックアップが可能です。

双方向

スタック

標準スタックは後入れ先出し(LIFO)に従います

イテレータなし

キュー

標準キューは先入れ先出し(FIFO)に従います

イテレータなし

優先キュー

アウトの最初の要素は常に最も優先度の高い要素です

イテレータなし

シーケンスコンテナ

シーケンスコンテナは、要素を線形の順序で格納します。すべての要素は、線に沿った位置によって相互に関連付けられています。それらは要素の挿入を可能にし、それらのすべてはそれらに対するいくつかの操作をサポートします。

STLは、次の3種類のシーケンス要素を提供します。

  • ベクター
  • リスト
  • そして

連想コンテナ:

これらは、キーを使用した要素への直接アクセスをサポートできるように設計されています。それらはシーケンシャルではありません。 4種類あります

連想コンテナ:

  1. セットする
  2. マルチセット
  3. 地図
  4. マルチマップ

上記のすべてのコンテナは、ツリーと呼ばれる構造にデータを格納します。

シーケンシャルとは異なり、検索、削除、挿入。コンテナセットまたはマルチセットは、さまざまなアイテムを格納し、値をキーとして使用してそれらを操作するための操作を提供できます。

また、マップまたはマルチマップを使用して、アイテムをペアで保存します。一方はキーと呼ばれ、もう一方はキーと呼ばれます。

値と呼ばれます。

派生コンテナ:

STLは、スタック、キュー、priority_queueの3つの派生コンテナを提供します。これらは、コンテナアダプターとも呼ばれます。

派生コンテナには次の3つのタイプがあります。

1.スタック

2.キュー

3.Priority_quue

スタック、キュー、優先キューは、さまざまなシーケンスコンテナから簡単に作成できます。派生コンテナはイテレータをサポートしていないため、データ操作に使用することはできません。ただし、削除操作と挿入操作を実装するために、2つのメンバー関数pop()とpush()をサポートしています。

C ++でのSTLに関するこの記事に進む

アルゴリズム

アルゴリズムは、コンテンツを処理するためにさまざまなコンテナで一般的に使用できる関数です。各コンテナは基本的な操作のための機能を提供しますが、STLはより拡張されたまたは複雑な操作をサポートするために60を超える標準アルゴリズムを提供します。標準のアルゴリズムでは、2つの異なるタイプのコンテナーを同時に操作することもできます。

STLアルゴリズムは、再利用性の哲学を強化します。これらのアルゴリズムを使用することにより、プログラマーは多くの時間と労力を節約できます。 STLアルゴリズムにアクセスするには、プログラムに含める必要があります。

STLアルゴリズムは、実行する操作の性質に基づいて、次のように分類できます。

  • 非変異アルゴリズム

  • 突然変異アルゴリズム

  • ソートアルゴリズム

  • アルゴリズムを設定する

  • リレーショナルアルゴリズム

C ++でのSTLに関するこの記事に進む

イテレータ:

イテレータはポインタのように機能し、コンテナの要素にアクセスするために使用されます。イテレータを使用して、コンテナの内容を移動します。イテレータはポインタと同じように扱われます。要件に応じて、それらをインクリメントまたはデクリメントできます。イテレータはコンテナをアルゴリズムに接続し、コンテナに格納されているデータの操作において重要な役割を果たします。これらは、ある要素から別の要素にパススルーするためによく使用されます。このプロセスは、コンテナーの反復処理と呼ばれます。

イテレータには次の5つのタイプがあります。

1.入力

2.出力

3.転送

4.双方向

5.ランダム

イテレータ

アクセス方法

移動方向

I / O機能

リマーク

入力

線形

転送のみ

読み取り専用

保存できません

出力

線形

転送のみ

書き込みのみ

保存できません

フォワード

線形

転送のみ

読み書き

保存できます

双方向

線形

前方と後方

読み書き

保存できます

ランダム

ランダム

前方と後方

読み書き

保存できます

さまざまなタイプのイテレータをさまざまなタイプのコンテナで使用する必要があります。

シーケンスおよび連想コンテナは、イテレータを通過できます。各タイプのイテレータは、特定の機能を実行するために使用されます。入力および出力イテレータは、最小限の機能をサポートします。それらは、コンテナ内を通過するためにのみ使用できます。フォワードイテレータは、入力および出力イテレータのすべての操作をサポートし、コンテナ内での位置を保持します。双方向イテレーターは、すべての順方向イテレーター操作をサポートしながら、コンテナー内で逆方向に移動する機能を提供します。

これで、「STL inC ++」に関するこの記事は終わりです。詳細を知りたい場合は、 信頼できるオンライン学習会社であるEdurekaによる。 EdurekaのJavaJ2EEおよびSOAトレーニングおよび認定コースは、Hibernate&SpringなどのさまざまなJavaフレームワークに加えて、コアJavaコンセプトと高度なJavaコンセプトの両方についてトレーニングするように設計されています。

質問がありますか?このブログのコメントセクションでそれについて言及してください。できるだけ早くご連絡いたします。