Edycja: Dokumentacja dla std::removezostała naprawiona od czasu napisania tej odpowiedzi. To samo dotyczy list::remove.
Pozwól, że podam przykład pokazujący, jak cpluscplus.com może to zrobić źle.
Rozważ std::removefunkcję od <algorithm>.
Faktem jest, że std::removenie usuwa przedmiotu z pojemnika. Jest tak, ponieważ std::removedziała tylko z parą iteratorów i nie wie nic o kontenerze, który faktycznie zawiera elementy. W rzeczywistości nie jest możliwe std::removepoznanie podstawowego kontenera, ponieważ nie ma możliwości, aby para iteratorów odkryła kontener, do którego należą iteratory. Więc std::removetak naprawdę nie usuwa przedmiotów, po prostu dlatego, że nie może . Jedynym sposobem na faktyczne usunięcie elementu z kontenera jest wywołanie funkcji członka na tym kontenerze.
Więc jeśli chcesz usunąć elementy, użyj Erase-Remove Idiom :
v.erase(std::remove(v.begin(), v.end(), 10), v.end());
Ale cplusplus.compodaje nieprawidłowe informacje na temat std::remove. To mówi
Zauważ, że ta funkcja nie zmienia elementów za nowym końcem, które zachowują swoje stare wartości i są nadal dostępne .
co nie jest poprawne. Iterator w zakresie [new_end, old_end)jest nadal dereferencyjny, ale to wcale nie znaczy, że zachowują stare wartości i są nadal dostępne. Są nieokreślone.
Podobnie cplusplus.compodaje również nieprawidłowe informacje na temat list::remove. Mówi :
Zauważ, że globalna funkcja algorytmu, remove, istnieje z podobnym zachowaniem, ale działa między dwoma iteratorami.
co jest całkowicie błędne. Globalne usunięcie mianowicie std::removenie jest podobne list::remove, jak widzieliśmy, że ten pierwszy NIE usuwa rzeczy z kontenera, ponieważ nie może , podczas gdy drugi (funkcja członka) naprawdę usuwa elementy, ponieważ może .
Ta odpowiedź została skopiowana z mojej innej odpowiedzi w następującym temacie, z niewielkimi modyfikacjami:
Uwaga: odkąd ostatnio na to natrafiłem, odpowiadając na powyższy temat, pamiętam to. W ciągu ostatnich dwóch lat napotkałem wiele błędów, których nie pamiętam. Mogę dodać kilka później, jeśli znów się spotkam.