Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Reverse Iterator

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Reverse Iterator

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::reference должен быть типом *i, где i является объектом типа Iterator.

reverse_iterator models

Специализация reverse_iterator модели один и тот же маршрутера и концепции доступа к генератору, смоделированные его аргументом Iterator. Кроме того, он может моделировать старые концепции итератора, указанные в следующей таблице:

If I models then reverse_iterator<I> models
Прочитабельный итератор стоимости, двунаправленный Траверсальный итератор Двухнаправленный итератор
Настоящий итератор стоимости, двунаправленный Траверсальный итератор Мубильный двунаправленный итератор
Прочитабельный итератор значения, Случайный доступ Треворный Итератор случайного доступа
Настоящий итератор Lvalue, итератор случайного доступа Итератор доступа к пластичным рандомам

reverse_iterator работает с reverse_iterator, если и только если X работает с Y.

reverse_iterator operations

В дополнение к операциям, требуемым концепциями, смоделированными reverse_iterator, reverse_iterator предоставляет следующие операции.

reverse_iterator();

Requires:Iterator must be Default Constructible.
Effects:Constructs an instance of reverse_iterator with m_iterator default constructed.

explicit reverse_iterator(Iterator x);

Effects:Constructs an instance of reverse_iterator with m_iterator copy constructed from x.
template<class OtherIterator>
reverse_iterator(
    reverse_iterator<OtherIterator> const& r
  , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
);
Requires:OtherIterator is implicitly convertible to Iterator.
Effects:Constructs instance of reverse_iterator whose m_iterator subobject is constructed from y.base().

Тенератор const& base() const;

Returns:m_iterator

reference оператор*() const;

Effects:
Iterator tmp = m_iterator;
return *--tmp;

reverse_iterator& operator++();

Effects:--m_iterator
Returns:*this

reverse_iterator& operator--();

Effects:++m_iterator
Returns:*this
template <class BidirectionalIterator>
reverse_iterator<BidirectionalIterator>n
make_reverse_iterator(BidirectionalIterator x);
Returns:An instance of reverse_iterator<BidirectionalIterator> with a current constructed from 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
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 23:28:26/0.0083639621734619/1