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>
| Definido no cabeçalho <iterator> |
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
Os tipos de vazios std::input_iterator_tag, std::output_iterator_tag, forward_iterator_tag, bidirectional_iterator_tag, e random_access_iterator_tag são usados para selecionar algoritmos apropriados com base na categoria de um iterador. Para cada tipo de iterador, um std::iterator_traits<Iterator>::iterator_category typedef está disponível, o que é um alias para um desses tipos de marcas cinco.
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.
Exemplo
Técnica comum para a seleção algoritmo baseado em tags categoria iterador é usar uma função de despachante (a alternativa é 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 }
Saída:
alg() called for random-access iterator alg() called for bidirectional iterator
Veja também
o iterador básica Original: the basic iterator The text has been machine-translated via Google Translate. (modelo de classe) [edit] | |
fornece uma interface uniforme para as propriedades de uma iteração Original: provides uniform interface to the properties of an iterator The text has been machine-translated via Google Translate. (modelo de classe) [edit] | |