std::input_iterator_tag, std::output_iterator_tag, std::forward_iterator_tag, std::bidirectional_iterator_tag, std::random_access_iterator_tag
De cppreference.com
|
|
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
<metanoindex/>
<tbody> </tbody>| Déclaré dans l'en-tête <iterator>
|
||
struct input_iterator_tag { }; |
||
struct output_iterator_tag { }; |
||
struct forward_iterator_tag : public input_iterator_tag { }; |
||
struct bidirectional_iterator_tag : public forward_iterator_tag { }; |
||
struct random_access_iterator_tag : public bidirectional_iterator_tag { }; |
||
Les types vides
std::input_iterator_tag, std::output_iterator_tag, forward_iterator_tag, bidirectional_iterator_tag et random_access_iterator_tag sont utilisés pour sélectionner des algorithmes appropriés en fonction de la catégorie d'un itérateur. Pour chaque type itérateur, un std::iterator_traits<Iterator>::iterator_category typedef est disponible, ce qui est un alias de l'un de ces types de balises cinq .Original:
The empty types
std::input_iterator_tag, std::output_iterator_tag, forward_iterator_tag, bidirectional_iterator_tag, and random_access_iterator_tag are used to select appropriate algorithms based on the category of an iterator. For every iterator type, a typedef std::iterator_traits<Iterator>::iterator_category is available, which is an alias to one of these five tag types.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Exemple
Technique courante pour la sélection de l'algorithme basé sur les balises catégorie itérateur est d'utiliser une fonction de régulateur (l'alternative est std :: enable_if)
Original:
Common technique for algorithm selection based on iterator category tags is to use a dispatcher function (the alternative is std::enable_if)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <iostream>
#include <vector>
#include <list>
#include <iterator>
template< class BDIter >
void alg(BDIter, BDIter, std::bidirectional_iterator_tag)
{
std::cout << "alg() called for bidirectional iterator\n";
}
template <class RAIter>
void alg(RAIter, RAIter, std::random_access_iterator_tag)
{
std::cout << "alg() called for random-access iterator\n";
}
template< class Iter >
void alg(Iter first, Iter last)
{
alg(first, last,
typename std::iterator_traits<Iter>::iterator_category());
}
int main()
{
std::vector<int> v;
alg(v.begin(), v.end());
std::list<int> l;
alg(l.begin(), l.end());
// std::istreambuf_iterator<char> i1(std::cin), i2;
// alg(i1, i2); // compile error: no matching function for call
}
Résultat :
alg() called for random-access iterator
alg() called for bidirectional iterator
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) | |
fournit une interface uniforme pour les propriétés d'un itérateur Original: provides uniform interface to the properties of an 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) | |