std::input_iterator_tag, std::output_iterator_tag, std::forward_iterator_tag, std::bidirectional_iterator_tag, std::random_access_iterator_tag
De cppreference.com
<metanoindex/>
<tbody> </tbody>
| Déclaré dans l'en-tête <iterator> |
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
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.
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.
#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. (classe générique) [edit] | |
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. (classe générique) [edit] | |