Espaces de noms
Variantes
Affichages
Actions

std::iterator_traits

De cppreference.com
< cpp‎ | iterator
 
 
Bibliothèque Iterator
Primitives Iterator
Original:
Iterator primitives
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
iterator_traits
input_iterator_tag
output_iterator_tag
forward_iterator_tag
bidirectional_iterator_tag
random_access_iterator_tag
iterator
Adaptateurs Iterator
Original:
Iterator adaptors
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
reverse_iterator
Itérateurs de flux
Original:
Stream iterators
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
istream_iterator
ostream_iterator
istreambuf_iterator
ostreambuf_iterator
Opérations Iterator
Original:
Iterator operations
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
advance
distance
prev (C++11)
next (C++11)
Gamme d'accès
Original:
Range access
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
begin (C++11)
end (C++11)
 
Déclaré dans l'en-tête <iterator>
template< class Iterator>
struct iterator_traits;
template< class T >
struct iterator_traits<T*>;
template< class T >
struct iterator_traits<const T*>;

std::iterator_traits est la classe "générique" qui fournit une interface uniforme pour accéder aux propriétés du type itérateur. Cela permet d'implémenter des algorithmes seulement en termes d'itérateurs.

Sommaire

[modifier] Types des membres

Type de membre Définition
difference_type Iterator::difference_type
value_type Iterator::value_type
pointer Iterator::pointer
reference Iterator::reference
iterator_category Iterator::iterator_category

[modifier] Spécialisations

std::iterator_traits étant "générique", il peut être spécialisé pour des types donnés par l'utilisateur qui peuvent être utilisés comme des itérateurs. La bibliothèque standard fournit deux spécialisations partielles pour des pointeurs de type T*, ce qui permet d'utiliser tous les algorithmes basés sur des itérateurs avec de simples pointeurs.

[modifier] Spécialisation T* : types des membres

Type de membre Définition
difference_type std::ptrdiff_t
value_type T
pointer T*
reference T&
iterator_category std::random_access_iterator_tag

[modifier] Spécialisation const T* : types des membres

Type de membre Définition
difference_type std::ptrdiff_t
value_type T
pointer const T*
reference const T&
iterator_category std::random_access_iterator_tag

[modifier] Exemple

implémentation universelle de reverse () pour les itérateurs bidirectionnels

#include <iostream>
#include <iterator>
#include <vector>
#include <list>
 
template<class BDIter>
void my_reverse(BDIter first, BDIter last)
{
    typename std::iterator_traits<BDIter>::difference_type n = std::distance(first, last);
    --n;
    while(n > 0) {
        typename std::iterator_traits<BDIter>::value_type tmp = *first;
        *first++ = *--last;
        *last = tmp;
        n -= 2;
    }
}
 
int main()
{
    std::vector<int> v{1,2,3,4,5};
    my_reverse(v.begin(), v.end());
    for(int n : v)
        std::cout << n << ' ';
    std::cout << '\n';
 
    std::list<int> l{1,2,3,4,5};
    my_reverse(l.begin(), l.end());
    for(auto n : l)
        std::cout << n << ' ';
    std::cout << '\n';
 
//    std::istreambuf_iterator<char> i1(std::cin), i2;
//    my_reverse(i1, i2); // erreur de compilation
 
}

Résultat :

5 4 3 2 1
5 4 3 2 1

[modifier] Voir aussi

l'itérateur de base
Original:
the basic iterator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(classe générique) [edit]
types de classes vides utilisés pour indiquer les catégories d'itérateurs
Original:
empty class types used to indicate iterator categories
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(classe) [edit]