类模板
<iterator>

std::iterator_traits

template <class Iterator> class iterator_traits;template <class T> class iterator_traits<T*>;template <class T> class iterator_traits<const T*>;
迭代器特性
定义迭代器属性的特性类。

标准算法通过使用相应的iterator_traits实例化的成员来确定传递给它们的迭代器的某些属性以及它们所代表的范围。

对于每种迭代器类型,都应定义一个相应的iterator_traits类模板的特化,至少定义以下成员类型:

成员描述
difference_type用于表示一个迭代器减去另一个迭代器的结果的类型。
value_type迭代器可以指向的元素类型。
指针迭代器可以指向的元素指针类型。
引用迭代器可以指向的元素引用类型。
iterator_category迭代器类别。可以是以下之一:

注意:对于不是至少前向迭代器输出迭代器,以上任何成员类型(iterator_category除外)都可以定义为void

iterator_traits 类模板带有一个默认定义,该定义从迭代器类型本身获取这些类型(如下所示)。它也为指针(T*)和常量指针(const T*)进行了特化。

请注意,任何自定义类只要公开继承基类std::iterator,都将拥有一个有效的iterator_traits实例化。

成员类型

成员通用定义T* 特化const T* 特化
difference_typeIterator::difference_typeptrdiff_tptrdiff_t
value_typeIterator::value_typeTT
指针Iterator::pointerT*const T*
引用Iterator::referenceT&const T&
iterator_categoryIterator::iterator_categoryrandom_access_iterator_tagrandom_access_iterator_tag

示例

1
2
3
4
5
6
7
8
9
10
11
// iterator_traits example
#include <iostream>     // std::cout
#include <iterator>     // std::iterator_traits
#include <typeinfo>     // typeid

int main() {
  typedef std::iterator_traits<int*> traits;
  if (typeid(traits::iterator_category)==typeid(std::random_access_iterator_tag))
    std::cout << "int* is a random-access iterator";
  return 0;
}

输出

int* is a random-access iterator


另见