gpt4 book ai didi

c++ - 为什么 std::count(_if) 返回 iterator::difference_type 而不是 size_t?

转载 作者:IT老高 更新时间:2023-10-28 23:00:26 25 4
gpt4 key购买 nike

Possible Duplicate:
Why does the C++ standard algorithm “count” return a ptrdiff_t instead of size_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);

Effects: Returns the number of iterators i in the range [first,last) for which the following corresponding conditions hold: *i == value, pred(*i) != false.

difference_typeiterator的difference_type,可以是负数,但是count只能返回值>=0。为什么difference_type 而不是 size_t 例如?

最佳答案

理论上,您可能有一个庞大的序列,其元素数量只能用 128 位表示。假设实现支持相应的整数类型,那么 size_t 很可能使用 64 位类型。但是,这个巨大序列的迭代器可以使用 128 位整数。请注意,序列不必在任何单个计算机的内存中表示。它可能被拆分到多个大型数据库中。

您可能还有一台相对较小的计算机,仅支持具有合理性能的 32 位类型。为了完全符合标准,它可能必须支持 64 位类型,但更希望使用平台 native 支持的表示来支持更快的计算。也就是说,size_t 可能不是最佳选择。创建迭代器时,您通常知道需要支持什么大小。

关于c++ - 为什么 std::count(_if) 返回 iterator::difference_type 而不是 size_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12573377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com