返回信息流据说是更好的泛型。。但是不是很理解。
比如
template <class Iterator>
struct iterator_traits {
typedef typename Iterator::iterator_category iterator_category;
typedef typename Iterator::value_type value_type;
typedef typename Iterator::difference_type difference_type;
typedef typename Iterator::pointer pointer;
typedef typename Iterator::reference reference;
};
iterator_traits是这样的
应用场景是这样的:
template <class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
//!!!我觉得这句可以直接改InputIterator::difference_type 为什么一定要用iterator_traits呢
count(InputIterator first, InputIterator last, const T& value)
{
typename iterator_traits<InputIterator>::difference_type n = 0; // 萃取迭代器的difference_type类型
for ( ; first != last; ++first)
if (*first == value)
++n;
return n;
}
问题是 iterator_traits 到底用处是什么呢
这是一条镜像帖。来源:北邮人论坛 / cpp / #42115同步于 2010/8/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于 iterator_traits的使用
macrox
2010/8/4镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
我来回答哈。
traits 为了解决访问内嵌型别的问题 让一个算法可以通过 I::value_type这样 访问到内嵌型别。但是我们忽然想到 那样必须提供一个原生指针的偏特化版本。为了保持算法的泛型。然后就再给iterator一个wrapper
然后偏特化它
然后保持算法的泛型
end