如何使用reverse_iterator插入

And*_*rew 23 c++ stl

我想在C++中将一些东西插入到STL列表中,但我只有一个反向迭代器.通常的方法是什么?

这有效:(当然可以)

std::list<int> l;
std::list<int>::iterator forward = l.begin();
l.insert(forward, 5);
Run Code Online (Sandbox Code Playgroud)

这不起作用:(我该怎么办?)

std::list<int> l;
std::list<int>::reverse_iterator reverse = l.rbegin();
l.insert(reverse, 10);
Run Code Online (Sandbox Code Playgroud)

Joh*_*itb 26

l.insert(reverse.base(), 10);在给定"反向"迭代器的定义时,将在末尾插入"10".实际上,l.rbegin().base() == l.end().


Mik*_*ale 7

基本上,你没有.见TCPPPL中的19.2.5.

reverse_iterator有一个名为base()的成员,它将返回一个"常规"迭代器.因此,以下代码适用于您的示例:

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

但要小心,因为base()方法在原始的reverse_iterator指向之后返回一个元素.(这使得指向rbegin()和rend()的reverse_iterators正常工作.)