Подтвердить что ты не робот

Как вставить с помощью reverse_iterator

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

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

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);
4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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