reverse_iterator -> iterator?
От: Аноним  
Дата: 11.05.06 07:12
Оценка:
Привет!

Как преобразовать reverse_iterator в обычный итератор, а то что то функции принимающие итератор не хотят иметь дело с reverse итератором, например erase из std::list — не компилится если передать туда reverse_iterator

Огромное спасибо!
Re: reverse_iterator -> iterator?
От: rg45 СССР  
Дата: 11.05.06 07:16
Оценка:
" Аноним " <0@users.rsdn.ru> wrote in message news:1891651@news.rsdn.ru...
> Привет!
>
> Как преобразовать reverse_iterator в обычный итератор, а то что то функции принимающие итератор не хотят иметь дело с reverse итератором, например erase из std::list — не компилится если передать туда reverse_iterator
>
> Огромное спасибо!

А что должно быть результатом этого преобразования для rend(); ?
Posted via RSDN NNTP Server 2.0
Я жду, когда этот пидарас
Автор: Bj777x
Дата: 22.06.20
либо удалит свое хамство здесь
Автор: Bj777x
Дата: 14.10 21:26
и здесь
Автор: Bj777x
Дата: 27.09 11:34
, либо восстановит ответы.
Re: reverse_iterator -> iterator?
От: Bell Россия  
Дата: 11.05.06 07:24
Оценка: 11 (3)
Здравствуйте, Аноним, Вы писали:

А>Привет!


А>Как преобразовать reverse_iterator в обычный итератор, а то что то функции принимающие итератор не хотят иметь дело с reverse итератором, например erase из std::list — не компилится если передать туда reverse_iterator


А>Огромное спасибо!



int main()
{
   list<int> l;
   l.push_back(1);
   l.push_back(2);
   l.push_back(3);
   l.push_back(4);

   list<int>::reverse_iterator rf = l.rbegin();
   ++rf;
   ++rf;
   list<int>::iterator f = rf.base();
   --f;
   l.erase(f);
   copy(l.begin(), l.end(), ostream_iterator<int>(cout, "\n"));
   return 0;
}


Только почитай внимательно документацию по base — там все не так очевидно, как кажется на первый взгляд (для меня, по крайне мере ).
Подробности можно посмотреть например у Майерса в "Effective STL", совет 28.
Любите книгу — источник знаний (с) М.Горький
Re[2]: reverse_iterator -> iterator?
От: Аноним  
Дата: 11.05.06 07:24
Оценка:
Здравствуйте, rg45, Вы писали:

R>А что должно быть результатом этого преобразования для rend(); ?


скорее всего что begin()
Можна и не преобразовывать, если бы их можна было использовать как обычные прямые
Re: reverse_iterator -> iterator?
От: Алексей.  
Дата: 11.05.06 13:50
Оценка:
Здравствуйте, Аноним, Вы писали:

У reverse_iterator есть фунция base(), которая возвращает iterator.
Re[2]: reverse_iterator -> iterator?
От: Roman Odaisky Украина  
Дата: 11.05.06 17:23
Оценка:
Здравствуйте, Bell, Вы писали:

B>Только почитай внимательно документацию по base — там все не так очевидно, как кажется на первый взгляд (для меня, по крайне мере ).

B>Подробности можно посмотреть например у Майерса в "Effective STL", совет 28.

Тонкость та, что &*std::reverse_iterator<decltype(iter)>(iter) != &*iter. 24.4.1: &*(reverse_iterator(i)) == &*(i — 1). Кстати, этот сдвиг на самом деле очень удобен. Например, если ra = reverse_iterator(a), rb = reverse_iterator(b), то [a, b), [rb, ra), [ra.base(), rb.base()) — один и тот же набор значений.
До последнего не верил в пирамиду Лебедева.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.