私はstd::list<some_object> events
を持っています。最後のものを除くリストのすべての要素を削除したいと思います。だから私は(this threadにより示唆されるように)やって考える:それはエラーが発生してC++リストの最後まで消去するリスト(リスト内の1つの要素)
std::list<some_object>::iterator it = events.begin(); // Init iterator on top of list
while(it!=*std::advance(events.end(),-1)) events.erase(it++);
は、残念ながら、上記の作業をされていません。
error: invalid initialization of non-const reference of type ‘std::_List_iterator<node_info>&’ from an rvalue of type ‘std::__cxx11::list<node_info>::iterator {aka std::_List_iterator<node_info>}’
while(it!=*std::advance(event_heap.end(),-1)){
しかし、list::end
はイテレータを返すことになっていませんか?私は間違って何をしていますか?
なぜ 'std :: list :: erase'を使わないのですか? – NathanOliver
'events.erase(events.begin()、 - (events.end()))の何が問題なのですか? – Beta
'std :: list :: erase()'を使うべきですが、代わりに 'back()'アイテムを '' std :: list''に '' push_back() 'してから、' 'std :: stap :: list temp :: swap() 'あなたのメイン' std :: list'との間の一時的な一時的な関係。 temp.push_back(events.back()); std :: swap(events、temp); 'tempが範囲外になると、保存しなかったアイテムはすべて解放されます。 –