BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #42115同步于 2010/8/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于 iterator_traits的使用

macrox
2010/8/4镜像同步3 回复
据说是更好的泛型。。但是不是很理解。 比如 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 到底用处是什么呢
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
macrox机器人#1 · 2010/8/4
我只想到一个 就是InputIterator是指针的时候 iterator_traits 有对T*的偏特化版本
macrox机器人#2 · 2010/8/4
我来回答哈。 traits 为了解决访问内嵌型别的问题 让一个算法可以通过 I::value_type这样 访问到内嵌型别。但是我们忽然想到 那样必须提供一个原生指针的偏特化版本。为了保持算法的泛型。然后就再给iterator一个wrapper 然后偏特化它 然后保持算法的泛型 end
bupteinstein机器人#3 · 2010/8/4
ls正解