我想在C ++中将一些内容插入到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);
答案 0 :(得分:26)
l.insert(reverse.base(), 10);
将在末尾插入“10”。实际上,l.rbegin().base() == l.end()
。
答案 1 :(得分:7)
基本上,你没有。见TCPPPL中的19.2.5。
reverse_iterator有一个名为base()的成员,它将返回一个“常规”迭代器。因此,以下代码适用于您的示例:
l.insert(reverse.base(),10);
要小心,因为base()方法在原始的reverse_iterator指向后返回一个元素。 (这是指向rbegin()和rend()的reverse_iterators正常工作。)