2016-10-23 3 views
1

いくつかのアルゴリズムのテンプレート名を見ると、
という名前がライブラリの概念に対応しています。STLの概念は、STLアルゴリズムのすべての引数要件をカバーしていますか?

例えば、std::mismatchとする。

template< class InputIt1, class InputIt2, class BinaryPredicate > 
std::pair<InputIt1,InputIt2> 
mismatch(InputIt1 first1, InputIt1 last1, 
      InputIt2 first2, 
      BinaryPredicate p); 

はまたlibrary conceptあるBinaryPredicateをとります。しかし他のアルゴリズムを見てみると


は、私は以下を参照してください。

  • UnaryPredicate
  • UnaryFunction
  • UnaryOperation
  • BinaryOperation
  • など

であり、対応する概念はない。

除外理由はありますか?
これらの概念は、既存の概念を組み合わせることによって導き出すことができますか?

+0

cppreferenceにはその一部が記載されており、他には記載されていません。私はあなたがそれを思っていると思う。 –

+0

'UnaryPredicate'は、少なくとも、Predicateの同義語のように思えます。 – StoryTeller

+1

'BinaryPredicate'は、実際のC++標準で使用され、定義されている用語/型名です(see section 25.1、[this draft](http://www.open-std.org/jtc1/sc22/wg21/) docs/papers/2013/n3690.pdf))。しかし、「UnaryPredicate」と「UnaryFunction」という用語は、標準では決して出現しません。 'BinaryOperation'と' UnaryOperation'は標準で使われていますが、 'BinaryPredicate'とほぼ同じように定義されていません。 – Cornstalks

答えて

1

C++標準では「概念」は定義されていません。

EqualityComparable, LessThanComparable, DefaultConstructible, 
MoveConstructible, CopyConstructible, MoveAssignable, CopyAssignable, 
Destructible, NullablePointer, Hash, TrivialClock, Allocator, 
Swappable or Container 

しかし、いくつかの要件は他のものとは異なる構文を使用します。タイプ(EqualityComparable)と定数、規格に記載されているように、例えば、allocatorswappableは、私のサンプルリストからキャメルケースの固定幅フォントの小文字のイタリック体(アロケータ)、等を使用するか、または。

PODTypeのような他の「概念」は、丁度定義として標準で扱われます。

たとえば、BinaryPredicateは概念または定義として定義されていません。

void unique(); 
template <class BinaryPredicate> void unique(BinaryPredicate pred); 

影響:すべてが、対象の範囲[first + 1,last)でイテレータiによって 呼ば等しい要素のすべての連続するグループからの最初の要素を消去しそれを使用して関数のテンプレート名として*i == *(i-1)( 引数のないバージョンの場合)またはpred(*i, *(i - 1))(述語引数を持つバージョンの場合)が保持されます。 のイテレータと消去された要素への参照のみを無効にします。

例外:等価比較または述語によって例外がスローされない限り、何もありません。

複雑:範囲[first,last)が空でない場合、正確 対応する述語の(last - first) - 1アプリケーション、述語のそうでなければアプリケーション。

ご覧のとおり、BinaryPredicateは定義されていません。 std::uniqueの動作にどのように影響するかを示しています。

一方、cppreferenceコンセプトリストは、の概念である非標準である提案から抽出されます。さらに、cppreferenceは完璧ではなく、すべてのwikiページがコンセプトプロポーザルの観点から完全ではなく、UnaryOperatorのように標準で表示されないテンプレートパラメータもあります。

+0

そのページの参照リストには、概念(実際の範囲)の提案からではなく、「C++標準の標準テキストで使用される名前付き要件」があります。 – Cubbi

関連する問題