- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
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_type
是iterator的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/
由于无聊和想要一些练习(所以,请不要告诉我 just use Boost :-))我目前正在实现一个 STL 风格的计数迭代器。 但是,在实现需要将 difference_type 定义为有意义的东西
当我尝试使用 std::distance 时使用 gcc 4.7 下的自定义迭代器,它提示找不到 difference_type .遗憾的是,我不知道为什么会失败。 #include class n
我正在为第 3 方 C 库编写 C++ 包装器。 该库提供了一些用于迭代一系列对象的函数。 我想编写一个迭代器来包装此行为,以便迭代更容易,但我想不出我将如何提供强制性的“差异”类型,因为迭代对象没有
我有一些序列化逻辑,其中我还序列化了 STL 数据结构。目前,我只是编写大小字段,然后通过遍历它来编写结构的每个元素。在反序列化中,我读取了大小字段,然后我知道何时读取完数据结构。 不,问题是如何正确
vector两者都有vector::size_type和 vector::difference_type .从size_type 开始,两者似乎都没有必要存在。保证能够保存与 vector 的最大元素
今天我正在替换一个低级的 C 风格的方法,该方法将缓冲区保存到文件中。整个事情看起来像这样: bool Profile::save(const char* path) { FILE* p
我看到 iterator_traits 总是定义一个 difference_type:https://en.cppreference.com/w/cpp/iterator/iterator_trait
我正在尝试找出 difference_type 成员对于满足 std::weakly_incrementable 的重要性概念。我目前正在定义一个满足 std::output_iterator 的类,
我正在尝试使用 reverse_iterator 从反向位置删除列表的特定项目。但是 STL_iterator.h 头文件中出现编译错误。 我正在尝试做... 这里的input[]是一个整数数组。
为什么返回类型是 std::count difference_type迭代器(通常是 ptrdiff_t )。 由于计数永远不会是负数,所以 size_t 技术上正确的选择?如果计数超出 ptrdif
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Why does the C++ standard algorithm “count” return a pt
在我的项目中,我想将流拆分为一些给定类型的值,所以我实现了一个模板函数 template TOutputIter SplitSpace(std::istream& IS, TOutputIter r
我正在尝试使用这个 vector.h 函数: random_shuffle(s.begin()+from+i,s.begin()+to,s); 发生此错误: c:\program files (x8
我是一名优秀的程序员,十分优秀!