Ответ 1
l.insert(reverse.base(), 10);
будет вставлять '10' в конец, учитывая ваше определение итератора 'reverse'. Собственно, l.rbegin().base() == l.end()
.
Я хочу вставить что-то в список 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);
l.insert(reverse.base(), 10);
будет вставлять '10' в конец, учитывая ваше определение итератора 'reverse'. Собственно, l.rbegin().base() == l.end()
.
По сути, вы этого не делаете. См. 19.2.5 в TCPPPL.
reverse_iterator
имеет член с именем base()
, который возвращает "обычный" итератор. Таким образом, следующий код будет работать в вашем примере:
l.insert(reverse.base(), 10);
Будьте осторожны, потому что метод base()
возвращает элемент один после того, на что указывал оригинал reverse_iterator
. (Это так, что обратные_тераторы, указывающие на rbegin()
и rend()
, работают правильно.)