Partager via


iterator_traits, struct

Struct d’assistance de modèle utilisé pour spécifier toutes les définitions de type critiques qu’un itérateur doit avoir.

Syntaxe

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 difference_type distance_type;
   typedef typename Iterator::pointer pointer;
   typedef typename Iterator::reference reference;
   };

Notes

Le struct de modèle définit les types de membres

  • iterator_category: synonyme de Iterator::iterator_category.

  • value_type: synonyme de Iterator::value_type.

  • difference_type: synonyme de Iterator::difference_type.

  • distance_type: synonyme de Iterator::difference_type.

  • pointer: synonyme de Iterator::pointer.

  • reference: synonyme de Iterator::reference.

Les spécialisations partielles déterminent les types critiques associés à un pointeur d’objet de type Type ou const Type * .*

Dans cette implémentation, vous pouvez également utiliser plusieurs fonctions de modèle qui n’utilisent pas de spécialisation partielle :

template <class Category, class Type, class Diff>
C _Iter_cat(const iterator<Category, Ty, Diff>&);

template <class Ty>
random_access_iterator_tag _Iter_cat(const Ty *);

template <class Category, class Ty, class Diff>
Ty *val_type(const iterator<Category, Ty, Diff>&);

template <class Ty>
Ty *val_type(const Ty *);

template <class Category, class Ty, class Diff>
Diff *_Dist_type(const iterator<Category, Ty, Diff>&);

template <class Ty>
ptrdiff_t *_Dist_type(const Ty *);

qui déterminent plusieurs des mêmes types plus indirectement. Vous utilisez ces fonctions comme arguments dans un appel de fonction. Leur seul objectif est de fournir un paramètre de modèle de classe utile à la fonction appelée.

Exemple

// iterator_traits.cpp
// compile with: /EHsc
#include <iostream>
#include <iterator>
#include <vector>
#include <list>

using namespace std;

template< class it >
void
function( it i1, it i2 )
{
   iterator_traits<it>::iterator_category cat;
   cout << typeid( cat ).name( ) << endl;
   while ( i1 != i2 )
   {
      iterator_traits<it>::value_type x;
      x = *i1;
      cout << x << " ";
      i1++;
   };
   cout << endl;
};

int main( )
{
   vector<char> vc( 10,'a' );
   list<int> li( 10 );
   function( vc.begin( ), vc.end( ) );
   function( li.begin( ), li.end( ) );
}
/* Output:
struct std::random_access_iterator_tag
a a a a a a a a a a
struct std::bidirectional_iterator_tag
0 0 0 0 0 0 0 0 0 0
*/

Spécifications

Header :<iterator>

Espace de noms : std

Voir aussi

<iterator>
Sécurité des threads dans la bibliothèque C++ Standard
Informations de référence sur la bibliothèque standard C++