我正在关注函数模板计数的示例,但我遗漏了一些东西。当然我没有完全理解 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,为什么我应该使用“不同的类型”(从另一个迭代器中减去一个迭代器)而不是“值类型”(迭代器可以指向的值)?
即使在这种情况下,我也尝试过并工作过。
我认为当函数返回 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);
请有人能澄清这一点吗?
非常感谢您的任何帮助。