2008-11-19 2 views
17

Я хочу вставить что-то в список STL в C++, но у меня есть только обратный итератор. Каков обычный способ сделать это?Как вставить с помощью reverse_iterator

Это работает: (конечно это делает)

std::list<int> l; 
std::list<int>::iterator forward = l.begin(); 
l.insert(forward, 5); 

Это не работает (? Что я должен делать вместо этого)

std::list<int> l; 
std::list<int>::reverse_iterator reverse = l.rbegin(); 
l.insert(reverse, 10); 

ответ

20

l.insert(reverse.base(), 10); вставит '10' в конце , учитывая ваше определение «обратного» итератора. На самом деле, l.rbegin().base() == l.end().

6

По существу, вы этого не делаете. См. 19.2.5 в TCPPPL.

Обратный_тератор имеет член под названием base(), который будет возвращать «обычный» итератор. Таким образом, следующий код будет работать в вашем примере:

l.insert (reverse.base(), 10);

Будьте осторожны, потому что метод base() возвращает элемент один после того, как указал указатель оригинала reverse_iterator. (Это делается так, чтобы обратные указатели, указывающие на rbegin() и rend(), работали правильно.)

Смежные вопросы