可能性の重複:
Why does the C++ standard algorithm “count” return a ptrdiff_t instead of size_t?なぜstd :: count(_if)がsize_tではなくiterator :: difference_typeを返すのですか?
アルゴリズムstd::count
/std::count_if
は、標準C++にあります。
template<class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
count(InputIterator first, InputIterator last, const T& value);
template<class InputIterator, class Predicate>
typename iterator_traits<InputIterator>::difference_type
count_if(InputIterator first, InputIterator last, Predicate pred);
エフェクト:私範囲[まず、以下の対応 条件を保持するために)最後にイテレータの数を返します:(predは* I ==値、* I)= falseを!。
difference_type
は負であることができるiterator's difference_type
、であるが、count
例えば> = 0なぜdifference_type
なくsize_t
だけ値を返すことができますか?
ありがとう、素晴らしい説明。 – ForEveR
@DietmarKuehlしかし、なぜiterator_traits :: difference_type'が良い選択ですか?ほとんどの場合、これは8バイト符号付き整数で、 'size_t'(8バイト符号なし整数)が十分に大きくないかもしれないという引数を既に破っています! –
@GrimFandango:他のイテレータの選択は、私の選択に影響を与えますか?TremendousIterator :: difference_type'要は、 'std :: size_t'を使うと、特殊なケースで特別な選択肢を使うのを防ぎ、入れ子型を使うと適切な選択をすることができます。 –