我想在C++中将一些东西插入到STL列表中,但我只有一个反向迭代器.通常的方法是什么?
这有效:(当然可以)
std::listl; std::list ::iterator forward = l.begin(); l.insert(forward, 5);
这不起作用:(我该怎么办?)
std::listl; std::list ::reverse_iterator reverse = l.rbegin(); l.insert(reverse, 10);
Johannes Sch.. 26
l.insert(reverse.base(), 10);
在给定"反向"迭代器的定义时,将在末尾插入"10".实际上,l.rbegin().base() == l.end()
.
l.insert(reverse.base(), 10);
在给定"反向"迭代器的定义时,将在末尾插入"10".实际上,l.rbegin().base() == l.end()
.
基本上,你没有.见TCPPPL中的19.2.5.
reverse_iterator有一个名为base()的成员,它将返回一个"常规"迭代器.因此,以下代码适用于您的示例:
l.insert(reverse.base(),10);
但要小心,因为base()方法在原始的reverse_iterator指向之后返回一个元素.(这使得指向rbegin()和rend()的reverse_iterators正常工作.)