【发布时间】:2021-11-12 02:17:15
【问题描述】:
我是 C++ 新手,所以请多多包涵。我想了解 STL iterator_traits。在“The C++ Standard Library”一书中,结构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 获得它吗?我的困惑似乎源于我(肯定不正确)理解子类型的信息必须来自用于实例化iterator_trait 的template <class T>。因此,如果您能解释一下,最好举个例子,我为什么需要以及在哪里需要 iterator_traits,这将非常有帮助。
【问题讨论】:
-
你有多少新?新手一般不会玩
templates。 -
@iammilind 好吧,我之前学过一些 C 和 Python,所以课程内容有点熟悉。模板不是这样,所以这是我学习新事物的地方。
-
好吧,如果你全职使用 C++ 10 年,你仍然会在 2021 年学习有关模板的新东西 :-)
-
嗨!我来自 2021 年;我已经全职使用 C++ 10 年了;我可以确认我仍在学习有关模板的新知识。
标签: c++ stl iterator traits iterator-traits