Zwykle warunkiem kontynuacji pętli jest: iterator != kontener.end(). Dla vectora może zadziała <, ale tak bardziej uniwersalnie jest !=.
Po wykonaniu erase() (ogólnie modyfikacji struktury kontenera) iterator jest już nieważny i nie możesz kontynuować. Samo erase natomiast zwraca poprawiony iterator. Można zrobić pętle w której jeśli dany element chcesz usunąć robisz erase zamiast ++.
for (auto temp = tab.begin(); temp != tab.end();) { if (temp->nr_dziennika == numer) temp = tab.erase(temp); else ++temp; }
Lub zgodnie z idiomem erase-remove:
auto it = std::remove_if(tab.begin(), tab.end(), [numer] (const Uczen& u) { return u.nr_dziennika == numer; }); tab.erase(it, tab.end());
91,832 zapytań
140,506 odpowiedzi
316,998 komentarzy
61,163 pasjonatów
Motyw:
Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡
Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.