![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Reverse IteratorBoost , ,
|
Author: | Дэвид Абрахамс, Джереми Сиек, Томас Витт | |||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Contact: | Если Итератор модели Random Access Traversal Iterator и Readable Lvalue Iterator, то iterator_category конвертируется в random_access_iterator_tag. В противном случае, если Итератор модели Двухнаправленный Траверсальный Итератор и Прочитаемый Итератор значение, то итератор_категории конвертируется в bidirectional_iterator_tag. В противном случае iterator_category конвертируется в input_iterator_tag.
reverse_iterator requirementsИтератор должен быть моделью двунаправленного Траверсального Итератора. Тип iterator_traits reverse_iterator modelsСпециализация reverse_iterator модели один и тот же маршрутера и концепции доступа к генератору, смоделированные его аргументом Iterator. Кроме того, он может моделировать старые концепции итератора, указанные в следующей таблице:
reverse_iterator reverse_iterator operationsВ дополнение к операциям, требуемым концепциями, смоделированными reverse_iterator, reverse_iterator предоставляет следующие операции. reverse_iterator();
explicit reverse_iterator(Iterator x);
template<class OtherIterator> reverse_iterator( reverse_iterator<OtherIterator> const& r , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition );
Тенератор const& base() const;
reference оператор*() const;
Iterator tmp = m_iterator; return *--tmp; reverse_iterator& operator++();
reverse_iterator& operator--();
template <class BidirectionalIterator> reverse_iterator<BidirectionalIterator>n make_reverse_iterator(BidirectionalIterator x);
ExampleСледующий пример печатает массив символов в обратном порядке, используя reverse_iterator. char letters_[] = "hello world!"; const int N = sizeof(letters_)/sizeof(char) - 1; typedef char* base_iterator; base_iterator letters(letters_); std::cout << "original sequence of letters:\t\t\t" << letters_ << std::endl; boost::reverse_iterator<base_iterator> reverse_letters_first(letters + N), reverse_letters_last(letters); std::cout << "sequence in reverse order:\t\t\t"; std::copy(reverse_letters_first, reverse_letters_last, std::ostream_iterator<char>(std::cout)); std::cout << std::endl; std::cout << "sequence in double-reversed (normal) order:\t"; std::copy(boost::make_reverse_iterator(reverse_letters_last), boost::make_reverse_iterator(reverse_letters_first), std::ostream_iterator<char>(std::cout)); std::cout << std::endl; Вывод: original sequence of letters: hello world! sequence in reverse order: !dlrow olleh sequence in double-reversed (normal) order: hello world! Исходный код для этого примера можно найти здесь. Статья Reverse Iterator раздела может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: ::
|
|||||||||||||||||||||||||||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |