c++ - iterator_trait 的典型用例是什么

标签 c++ stl iterator traits iterator-traits

我是 C++ 新手,所以请多多包涵。我想了解 STL iterator_traits .在“C++ 标准库”一书中,结构 iterator_traits定义如下:

template <class T>
struct iterator_traits {
  typedef typename T::value_type value_type;
  typedef typename T::difference_type difference_type;
  typedef typename T::iterator_category iterator_category;
  typedef typename T::pointer pointer;
  typedef typename T::reference reference;
};

所以在我看来,它重新暴露了 T 的子类型。已经暴露了。再往前走,书中给出了如何使用它的示例,如下所示

template <class MyIterator>
void do_something(MyIterator start, MyIterator end) {
    typedef typename iterator_traits<MyIterator>::value_type value_type; 
    value_type v = *start;
    .....
}

我的问题是我为什么需要这个 iterator_traits这里的结构,如果想法是获得 value_type ,我不能从 MyIterator 获得它吗?直接地 ?我的困惑似乎源于我(肯定是不正确的)理解子类型的信息必须来自 template <class T>用于实例化 iterator_trait .因此,如果您能解释一下,最好举个例子,我为什么需要以及在哪里需要 iterator_traits,这将非常有帮助。

最佳答案

指向数组的指针可以用作随机访问迭代器。

对于指针(显然不能将类型声明为嵌套类型,因为只有类可以具有嵌套类型)和类类型迭代器,需要某种一致的方法来获取这些类型。特征类模板提供了这种一致的方式。

iterator_traits 类模板专门用于如下指针:

template <typename T>
struct iterator_traits<T*>
{
    typedef std::random_access_iterator_tag iterator_category;
    typedef T                               value_type;
    typedef T*                              pointer;
    typedef T&                              reference;
    typedef std::ptrdiff_t                  difference_type;
};

关于c++ - iterator_trait 的典型用例是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6742008/

相关文章:

c++ - 单一与共享所有权的含义

c++从二叉搜索树中的文本文件输入单词

c++ - 如果列表为空,QList::first() 会返回什么?

c++ - 在 Visual C 2010 项目中包含一个 Visual 2005 库

python - Python `list.extend(iterator)` 保证是惰性的吗?

c++ - 反向打印任何 vector 的通用函数,编译器错误

c++ - 带有 Boost 的 g++-5.1.0 是否支持 C++17?

c++ - 如何从 GCC/clang 程序集输出中删除 "noise"?

c++ - 按第一个值降序排列一组对,然后按第二个值的字母顺序排列

java - 如何在 Java 中创建自定义迭代器?