如何使用reverse_iterator插入

时间:2008-11-19 00:33:38

标签: c++ stl

我想在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);

2 个答案:

答案 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正常工作。)