Was passiert bei erase(end())?
-
Was passiert wenn ich erase() auf end() mache? Prüft der das oder muss ich das prüfen?
MfG SideWinder
-
SideWinder schrieb:
Was passiert wenn ich erase() auf end() mache? Prüft der das oder muss ich das prüfen?
MfG SideWinderalle doku, die ich lese, sagt nicht, daß du dürftest.
man spricht immer davon, daß der iterator auf ein element zeigt, das gelöscht werden soll.und der gcc würde bei übergabe von end() sogar ein wenig käse bauen.
template<typename _Tp, typename _Alloc> typename vector<_Tp,_Alloc>::iterator vector<_Tp,_Alloc>:: erase(iterator __position) { if (__position + 1 != end())//ist nicht der fall std::copy(__position + 1, end(), __position);//wird nicht aufgerufen --this->_M_impl._M_finish;//geschrumpft wird std::_Destroy(this->_M_impl._M_finish);und *end() wird nochmal destruiert, obwohl es schon mausetot ist return __position; }
-
Gut ich denke ich werde es lieber prüfen, danke

// Macros sind ne tolle Sache bei der Code-Vereinfachung #define SAFE_ERASE(container,iterator) \ if((iterator) != (container).end()) \ { \ (container).erase((iterator)); \ }MfG SideWinder
-
erase() auf end()? Komische Sachen macht ihr...

-
Böser SideWinder, wir nehmen dafür doch die putzigen template-funktionen

template< typename T > void SAFE_ERASE( T& container, typename T::iterator& iterator ) { if( iterator != container.end() ) container.erase( iterator ); }
-
@User: Geändert. Schade eigentlich, auf Selbstmach-Templates komm ich immer nur wenn ich elitär sein will oder mich jemand darauf hinweist

MfG SideWinder
-
Du solltest das eher so bauen das das nie der Fall sein kann anstatt diesen Fall abzuprüfen.
-
STLport mit SafeIterators haut dir das übrigens zur Laufzeit um die Ohren, wenn mal ein erase auf end() passiert.
-
und was passiert bei --(container.begin()) ?

-
container.begin() ist (normalerweise) kein lvalue

-
meinung schrieb:
Du solltest das eher so bauen das das nie der Fall sein kann anstatt diesen Fall abzuprüfen.
Sag mir wie das geht bei Map.find()
MfG SideWinder