Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um struct auxiliar de modelo usado para especificar todas as definições de tipo crítico que um iterador deve ter.
Sintaxe
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;
};
Comentários
O struct de modelo define os tipos membro
iterator_category: um sinônimo deIterator::iterator_category.value_type: um sinônimo deIterator::value_type.difference_type: um sinônimo deIterator::difference_type.distance_type: um sinônimo deIterator::difference_type.pointer: um sinônimo deIterator::pointer.reference: um sinônimo deIterator::reference.
As especializações parciais determinam os tipos críticos associados a um ponteiro de objeto do tipo Type ou const Type * .*
Nesta implementação, também é possível usar várias funções de modelo que não usam especialização 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 determinam vários dos mesmos tipos mais indiretamente. Use essas funções como argumentos em uma chamada de função. Sua única finalidade é fornecer um parâmetro de modelo de classe útil para a função chamada.
Exemplo
// 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
*/
Requisitos
Cabeçalho:<iterator>
Namespace: std
Confira também
<iterator>
Acesso Thread-Safe na Biblioteca Padrão C++
Referência da biblioteca padrão C++