2014-03-29 49 views
3

我有一些叫做Order的類。出於某種原因,下面的代碼在使用rbegin()時不會編譯,但它適用於begin()。在我聲明迭代器的方式中有問題,或者我的指針引用有問題嗎?地圖迭代器工作的開始(),但不是rbegin()

map<double, list<Order*>> m 
typedef map<double, list<Order*>>::iterator iter; 
iter iterator; 

iterator = m.rbegin(); // this only works for m.begin() 

謝謝!

回答

4

rbegin()返回reverse_iterator,而不是iterator

+1

的確。如果使用C++ 11,你可以嘗試'auto it = m.rbegin();' –

2

begin()rbegin()返回的類型是不同的:

  • begin()回報std::map<K, V>::iterator
  • rbegin()回報std::reverse_iterator<std::map<K, V>::iterator>
+0

有趣。我不知道。謝謝! –