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>| Definido no cabeçalho <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 { }; |
||
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.
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.
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. You can help to correct and verify the translation. Click here for instructions. (modelo de classe) | |
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. You can help to correct and verify the translation. Click here for instructions. (modelo de classe) | |