## 16.1 ライブラリの拡張

標準 C++ ライブラリを採用することは、C++ プログラミング言語のユーザーにとって画期的な進展です。ライブラリは OOP で書かれており、豊富なオブジェクトを提供しますが、まったく異なるパラダイムも使用しています。このもうひとつの手法は汎用プログラミングと呼ばれ、汎用アルゴリズムを広範なデータ構造に適用するための柔軟な手段を提供します。この 2 つの高度な設計パラダイムの合成と C++ の柔軟性が組み合わされて、前例のないほど高度で拡張可能なライブラリが誕生しました。

この合成の最も顕著な例は、ユーザーが定義したコンテナとアルゴリズムを使用してライブラリを拡張できることです。この拡張が可能な理由は、データ構造の定義と、これらの構造での一般演算定義と区別されているためです (1.2.2 節)。ライブラリには、この 2 つの広義のグループについて非常に明細なパラメータが定義されており、標準仕様に準じている限り、異なるソースのコンテナとアルゴリズムが共に有効に機能することが保証されています。同時に、コンテナは、データとそのデータへの一定範囲の演算を従来の OOP 形式でもカプセル化します。

各標準コンテナは、シーケンスまたは連想コンテナのいずれかの型に分類されます。ユーザー定義のコンテナの場合、コンテナの基本要求が標準で定義されているため、これらのグループに分類する必要はありません。ただし、特定のコンテナにどのアルゴリズムがいかに効率的に作用するかを判断する上で、この分類はとても便利です。コンテナのカテゴリを決定する上での最も重要な特性は、反復子カテゴリと要素の順序です。(詳細は、各コンテナ型に関する章を参照してください。各コンテナと反復子のリストは、『標準 C++ クラスライブラリ・リファレンス』にあります。)

標準 C++ ライブラリのアルゴリズムは、さまざまな条件により分類することができます。最も重要な条件を以下に挙げます。

- アルゴリズムがコンテナの内容を変更するかどうか

- アルゴリズムの要求する反復子の型

- アルゴリズムがコンテナのソートを必要とするかどうか

アルゴリズムが、その適用先のコンテナに対して追加の状態条件を要求する場合があります。たとえば、すべての標準 set アルゴリズムは、コンテナがソート済みの順序であるだけでなく、要素の順序がアルゴリズムに使用されている同じ比較関数またはオブジェクトを使用して決定されることも要求します。

Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。
OEM リリース, 1998 年 6 月