为什么std :: count_if返回有符号值而不是unsigned?

Vio*_*ffe 7 c++ stl standard-library stl-algorithm

刚刚意识到std::count_if 返回一个有符号的值.

为什么这样设计?在我看来,这两者都没有意义(结果只能是一个自然数,即非负整数),因为它不允许做一些简单的事情,比如将这个结果与容器进行比较size()而不会得到警告或使用显式类型转换.

我真的认为返回类型应该有size_type.

我错过了什么吗?

urz*_*eit 2

我认为返回类型的目标是兼容std::count需要两个迭代器(想想指针)并返回之间的值(您可以将其视为两个指针的差异)。指针差异(如 中使用的ptrdiff_t)必须是有符号值。

由于兼容性,std::count您可以轻松比较这两个函数的结果。

编辑:这里使用有符号值没有与范围相关的缺点,因为该值至少在范围内,而范围[0, std::count]本身也在范围内[0, end_ptr - start_ptr]。因为end_ptr - start_ptr键入为ptrdiff_t或类似,所以已签名。

  • 废话。`std::count` 描述清楚地表明:“返回 [first,last) 范围内比较等于 val 的 **元素数量**。” 元素数量不能为负数。“count”参数(迭代器)的类型完全不相关。 (6认同)