У меня есть std::list<some_object> events
, и я хотел бы удалить все элементы этого списка, кроме последнего. Так я думал, что делать (как это было предложено this thread):C++ List erase to end() - 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()', но в качестве альтернативы, возможно, вы можете 'push_back()' элемент 'back()' в temp 'std :: list', а затем' std :: swap() 'temp с вашим основным' std :: list', например: 'std :: list temp; temp.push_back (events.back()); std :: swap (события, temp); 'Когда temp затем выходит за рамки, он освободит все элементы, которые вы не сохранили. –