我正在关注有关函数模板 Count 的示例,但我遗漏了一些东西。我当然没有完全理解 iterator_traits,我很困惑:
模板函数 COUNT 已声明为:
template <class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
count (InputIterator first, InputIterator last, const T& val);
我的问题:
1) 为什么使用 iterator_traits::difference_type ? 该函数返回一个对象为什么不使用简单的:
template <class InputIterator, class T>
T count(InputIterator first, InputIterator last, const T& val);
我已经尝试并成功了。
2) 如果我必须使用 iterator_traits,为什么我应该使用“different_type”(从一个迭代器中减去另一个)而不是“value_type”(迭代器可以指向的值)?
即使在这种情况下我也尝试过并工作过。
我认为当函数返回 Iterator 时应该使用 iterator_traits,但后来我看到了模板函数 FIND,这让我更加困惑。
template <class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val);
而我会这样编码:
template <class InputIterator, class T>
typename iterator_traits<InputIterator>::value_type
find( nputIterator first, InputIterator last, const T& val);
有人可以澄清这一点吗?
非常感谢您的帮助。
最佳答案
std::count
应该返回某个元素的 count ,因此返回类型需要是整数类型,但是 T
不一定是整数类型,因为它可以是任何东西(准确地说,它是元素的类型)。
关于c++ - c++中模板函数count的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17408325/