gpt4 book ai didi

c++ - 为什么 C++ 标准算法 "count"会返回一个 difference_type 而不是 size_t?

转载 作者:IT老高 更新时间:2023-10-28 12:31:20 29 4
gpt4 key购买 nike

为什么返回类型是 std::count difference_type迭代器(通常是 ptrdiff_t )。

由于计数永远不会是负数,所以 size_t 技术上正确的选择?如果计数超出 ptrdiff_t 的范围怎么办?因为数组的理论可能大小可以是size_t ?


编辑: 到目前为止,对于函数返回 ptrdiff_t 的原因,还没有合适的答案。 .从下面的答案中收集到的一些解释是返回类型是 iterator_traits<InputIterator>::difference_type这是通用的,可以是任何东西。直到那时,它才有意义。在某些情况下,计数可能会超过 size_t .但是,返回类型为什么是 typedef ptrdiff_t iterator_traits<InputIterator>::difference_type 仍然没有意义。用于标准迭代器而不是 typedef size_t iterator_traits<InputIterator>::difference_type .

最佳答案

std::count()算法依赖于迭代器类型来定义一个足够大的整数类型来表示范围的任何大小。容器的可能实现包括文件和网络流等。不能保证整个范围立即适合进程的地址空间,所以std::size_t可能太小了。

标准std::iterator_traits<> 提供的唯一整数类型是 std::iterator_traits<>::difference_type ,适用于表示两个迭代器之间的“距离”。对于实现为指针(包装器)的迭代器,此类型为 std::ptrdiff_t .没有size_type或类似的迭代器特征,所以没有其他选择。

关于c++ - 为什么 C++ 标准算法 "count"会返回一个 difference_type 而不是 size_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7505083/

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