std::input_iterator_tag, std::output_iterator_tag, std::forward_iterator_tag, std::bidirectional_iterator_tag, std::random_access_iterator_tag
Aus 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. |
| Defined in header <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 { }; |
||
Die leeren Typen
std::input_iterator_tag, std::output_iterator_tag, forward_iterator_tag, bidirectional_iterator_tag und random_access_iterator_tag werden verwendet, um geeignete Algorithmen auf die Kategorie eines Iterators auszuwählen. Für jeden Iterator-Typ, ist ein typedef std::iterator_traits<Iterator>::iterator_category zur Verfügung, welches ist ein Alias für eine dieser fünf tag Typen .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.
[Bearbeiten] Beispiel
Verbreitete Technik zur Auswahl eines Algorithmus auf Iteratorkategorie Tags zugrunde, einen Dispatcher-Funktion verwenden (die Alternative ist 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 }
Output:
alg() called for random-access iterator alg() called for bidirectional iterator
[Bearbeiten] Siehe auch
| die grundlegende Iterator 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. (Klassen-Template) | |
| bietet einheitliche Schnittstelle zu den Eigenschaften eines Iterators 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. (Klassen-Template) | |

