Привет!
Как преобразовать reverse_iterator в обычный итератор, а то что то функции принимающие итератор не хотят иметь дело с reverse итератором, например erase из std::list — не компилится если передать туда reverse_iterator
Огромное спасибо!
" Аноним " <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
Здравствуйте, Аноним, Вы писали:
А>Привет!
А>Как преобразовать 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.
Здравствуйте, rg45, Вы писали:
R>А что должно быть результатом этого преобразования для rend(); ?
скорее всего что begin()
Можна и не преобразовывать, если бы их можна было использовать как обычные прямые
Здравствуйте, 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()) — один и тот же набор значений.