類模板
<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


另見