std::input_iterator_tag, std::output_iterator_tag, std::forward_iterator_tag, std::bidirectional_iterator_tag, std::random_access_iterator_tag
Материал из cppreference.com
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google.
Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке. Щёлкните здесь, чтобы увидеть английскую версию этой страницы |
| Определён в заголовочном файле <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 { }; |
||
Пустым типов
std::input_iterator_tag, std::output_iterator_tag, forward_iterator_tag, bidirectional_iterator_tag, и random_access_iterator_tag используются для выбора соответствующих алгоритмов, основанных на категорию итератора. Для каждого типа итератора, ЬурейеЕ std::iterator_traits<Iterator>::iterator_category доступны, который является псевдонимом к одному из этих пяти типов теги.Оригинал:
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.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Пример
Общие техника для алгоритма отбора, основанного на итератор теги категории заключается в использовании функции диспетчера (альтернатива STD :: enable_if)
Оригинал:
Common technique for algorithm selection based on iterator category tags is to use a dispatcher function (the alternative is std::enable_if)
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Запустить этот код
#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 }
Вывод:
alg() called for random-access iterator alg() called for bidirectional iterator
[править] См. также
| основной итератор Оригинал: the basic iterator Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (шаблон класса) | |
| предоставляет единый интерфейс к свойствам итератора Оригинал: provides uniform interface to the properties of an iterator Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (шаблон класса) | |

