このページでは、C++ の標準ライブラリである「STL」について取り上げます。
C++ の標準ライブラリの一部を指す名称です。
C++ の標準ライブラリの中で、具体的にどの部分を STL と呼ぶのかは曖昧ですが、Standard Template Library という名称からわかるように、テンプレートの機能を活用して設計されていることに特徴があり、データ構造(STL ではコンテナと呼ばれる)、コンテナ内の要素に対する処理(アルゴリズム)、イテレータを提供する部分を指すと捉えることが多いです。
STL を構成する重要な要素として、コンテナ、アルゴリズム、イテレータ、関数オブジェクトがあります。コンテナは、各種のデータ構造をクラステンプレートを使って実装したもので、その要素に対する処理(アルゴリズム)を関数テンプレートとして実装しています。アルゴリズムに与える追加の入力(たとえばソートやサーチの条件など)を関数オブジェクトとして引き渡せます。そして、アルゴリズムを適用するコンテナ内の要素を指定するためにイテレータを用います。
複数の種類があるコンテナと、多数のアルゴリズムとが直接的には結びついておらず、イテレータの仕組みがあいだに入っていることは重要です。アルゴリズムが求める要件と、イテレータがもつ特性が一致していれば、イテレータが実際に指し示している要素が、どのような実装のコンテナに含まれていても問題ありません。アルゴリズムの要件とは、たとえば二分探索であれば、要素を直接アクセスできることが挙げられます(直接アクセスできなければ、パフォーマンスが極端に悪くなってしまうため)。イテレータの特性とは、コンテナ内の要素を直接アクセスできる、順次アクセスしかできない、逆方向にも辿れるといったことです。
このように、基本的な考えとして、要件が合うかどうかだけを問題にしており、実際の型を問題にしないようになっており、型に依存しないジェネリックプログラミングの考え方を実現したものといえます。こうした特徴により、コンテナとアルゴリズムの膨大な組み合わせがあっても、コンテナはコンテナ、アルゴリズムはアルゴリズムのことだけを考えて実装することができますし、要件を満たすように注意を払えば、STL に含まれていない新たなコンテナやアルゴリズムを追加実装することも可能です。
STL の構成要素に関する解説が、C++編【標準ライブラリ】にあります。コンテナについては第4章~第12章、アルゴリズムについては第18章~第24章、関数オブジェクトについては第25章、イテレータについては第14章および第26章で解説しています。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |