15

重複の可能性:
C++ 標準アルゴリズム「count」が size_t ではなく ptrdiff_t を返すのはなぜですか?

標準 C++ にはアルゴリズムstd::count/があります。std::count_if

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);

効果: 範囲 [first,last) 内の反復子 i の数を返します。これには、次の対応する条件が適用されます: *i == value, pred(*i) != false.

difference_typeis iterator's difference_type、これは負になる可能性がありますが、count値 >= 0 のみを返すことができます。たとえば、なぜdifference_typeそうではないのでしょうか?size_t

4

1 に答える 1

12

理論的には、要素数が 128 ビットでしか表現できない膨大な数のシーケンスが存在する可能性があります。実装が対応する整数型をサポートしていると仮定するとsize_t、64 ビット型を使用する可能性が非常に高くなります。ただし、この巨大なシーケンスの反復子は 128 ビット整数を使用できます。シーケンスは、個々のコンピューターのメモリで表現される必要がないことに注意してください。複数の巨大なデータベースに分割される場合があります。

また、妥当なパフォーマンスで 32 ビット タイプのみをサポートする比較的小型のコンピュータを使用している場合もあります。標準に完全に準拠するには、64 ビット型をサポートする必要があるかもしれませんが、プラットフォームでネイティブにサポートされている表現を使用して、より高速な計算をサポートすることが望ましい場合があります。つまりsize_t、最適な選択ではない可能性があります。イテレータを作成するとき、通常、サポートする必要があるサイズはわかっています。

于 2012-09-24T21:51:47.353 に答える