iterator_traits (Struct)

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Un struct de auxiliar de plantilla que se utiliza para especificar todas las definiciones de tipo crítico que debería tener un iterador.

estructura iterator_traits {typedef typename Iterator::iterator_category iterator_category typedef typename Iterator::value_type value_type typedef typename Iterator::difference_type difference_type; distance_type de difference_type (typedef); typedef typename Iterator::pointer puntero; typedef typename referencia Iterator::reference;};

La estructura de la plantilla define los tipos de miembro

  • iterator_category: un sinónimo de Iterator::iterator_category.

  • value_type: un sinónimo de Iterator::value_type.

  • difference_type: un sinónimo de Iterator::difference_type.

  • distance_type: un sinónimo de Iterator::difference_type.

  • puntero: un sinónimo de Iterator::pointer.

  • referencia de: un sinónimo de Iterator::reference.

Las especializaciones parciales determinan los tipos críticos asociados con un puntero de objeto del tipo **tipo * ** o const **tipo * **.

En esta implementación que también se puede utilizar varias funciones de plantilla que no hace usan de especialización parcial:

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 *);

que determinan algunos de los mismos tipos más indirectamente. Estas funciones se utilizan como argumentos en una llamada de función. Su única finalidad es proporcionar un parámetro de la clase de plantilla útil a la función llamada.

// 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   
*\  

Encabezado:<>>

Espacio de nombres: std

<>>
Seguridad para subprocesos en la biblioteca estándar de C++
Biblioteca de plantillas estándar

Mostrar: