Ich habe eine std::list<some_object> events
und ich möchte alle Elemente dieser Liste mit Ausnahme der letzten löschen. Also dachte ich, zu tun (wie von this thread vorgeschlagen):C++ Liste löschen bis zum Ende() - 1 Elemente in der Liste
std::list<some_object>::iterator it = events.begin(); // Init iterator on top of list
while(it!=*std::advance(events.end(),-1)) events.erase(it++);
Leider über das nicht funktioniert, da es den Fehler produziert:
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)){
Aber nicht list::end
soll einen Iterator zurück? Was mache ich falsch?
Warum nicht 'std :: list :: erase' verwenden? – NathanOliver
Was ist los mit 'events.esase (events.begin(), - (events.end()));'? – Beta
Sie sollten 'std :: list :: erase()' verwenden, aber als Alternative könnten Sie vielleicht 'push_back()' das 'back()' Element in eine temp 'std :: list' und dann' std :: swap() 'the temp mit Ihrer Haupt-' std :: list', zB: 'std :: list temp; temp.push_back (events.back()); std :: swap (events, temp); 'Wenn die temp dann den Gültigkeitsbereich verlässt, werden alle Elemente freigegeben, die Sie nicht gespeichert haben. –