2008-11-19 50 views
17

我想在C++中插入一些STL列表,但我只有一個反向迭代器。通常的做法是什麼?如何用reverse_iterator插入

這工作:(當然它)

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); 

回答

20

l.insert(reverse.base(), 10);將插入 '10' 末,給定你的'反向'迭代器的定義。其實,l.rbegin().base() == l.end()

6

本質上,你沒有。見TCPPPL中的19.2.5。

reverse_iterator有一個名爲base()的成員,它將返回一個「常規」迭代器。因此,下面的代碼將在您的示例中起作用:

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

要小心,因爲base()方法在原始reverse_iterator指向後返回一個元素。 (這使得指向rbegin()和rend()的reverse_iterators正常工作。)