1)特定のstl
アルゴリズムについて、そのコンテナを使用するために実装する必要のあるカスタムコンテナ/イテレータ機能をどのように見つけるのですか?
2)コンテナをすべてのstl
アルゴリズムと完全に互換性のあるものにするために何を実装する必要がありますか?
C ++ 11標準では、脚注の§25.1に記載されています。
3すべてのアルゴリズムは、データ構造の特定の実装から分離されており、イテレータータイプによってパラメーター化されます。このため、これらのデータ構造がアルゴリズムの前提を満たすイテレータタイプを持っている限り、プログラム定義のデータ構造を処理できます。
その後:
5この節全体を通して、テンプレートパラメータの名前はタイプ要件を表すために使用されます。アルゴリズムのテンプレートパラメータがInputIterator、InputIterator1、またはInputIterator2の場合、実際のテンプレート引数は入力イテレータ(24.2.3)の要件を満たす必要があります。アルゴリズムのテンプレートパラメータがOutputIterator、OutputIterator1、またはOutputIterator2の場合、実際のテンプレート引数は出力イテレータの要件を満たす必要があります(§24.2.4)。アルゴリズムのテンプレートパラメータがForwardIterator、ForwardIterator1、またはForwardIterator2の場合、実際のテンプレート引数はフォワードイテレータの要件を満たしている必要があります(§24.2.5)。アルゴリズムのテンプレートパラメータがBidirectionIterator、Bidirection-Iterator1、またはBidirectionIterator2の場合、実際のテンプレート引数は、双方向イテレータ(§24.2.6)の要件を満たす必要があります。アルゴリズムのテンプレートパラメータがRandomAccessIterator、Random-AccessIterator1、またはRandomAccessIterator2の場合、実際のテンプレート引数はランダムアクセスイテレータの要件を満たしている必要があります(§24.2.7)。
したがって、基本的には、カスタムクラスに通常のイテレータを取得する方法を提供する必要があり、これらのオブジェクトは、サポートするアルゴリズムに応じて要件を満たす必要があります。
たとえばstd::any_of
、次のように宣言されていることがわかります。
template <class InputIterator, class Predicate>
bool any_of(InputIterator first, InputIterator last, Predicate pred);
したがって、入力イテレータを提供する必要があります。そうすると、§24.2.3でその要件を確認し、それらを実装できます。
a != b
)*a
)a->m
)イテレータの種類ごとに同じ話。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加