Ce face std::list::remove
Spre deosebire de std::remove din <algorithm>, funcția membră remove a listei chiar șterge elementele (le scoate din listă și le distruge). remove_if face același lucru pentru elementele care îndeplinesc o condiție.
unique() păstrează doar primul dintr-un grup de elemente egale aflate unul după altul. Ca să elimini toate duplicatele, sortează întâi lista. Din C++20, toate aceste funcții returnează numărul de elemente șterse.
Parametri
| Parametru | Descriere |
|---|---|
valoare |
Elementele egale cu ea sunt șterse. |
conditie |
Pentru remove_if: funcție care returnează true pentru elementele de șters. |
egale |
Pentru unique: opțional, funcție care spune dacă două elemente vecine sunt „egale”. |
Ce returnează
Numărul de elemente șterse (din C++20; înainte, void).
Exemple
Exemplul 1: remove și remove_if
#include <list>
#include <print>
int main() {
std::list<int> v{3, 0, 7, 0, 2, 0, 9};
auto n = v.remove(0);
std::println("Am șters {} zerouri: {}", n, v);
v.remove_if([](int x) { return x > 5; });
std::println("Fără cele peste 5: {}", v);
}
Rezultat
Am șters 3 zerouri: [3, 7, 2, 9]
Fără cele peste 5: [3, 2]
Exemplul 2: unique: doar duplicatele vecine
Prima dată rămâne un 1 la final, pentru că nu era lângă celelalte. După sortare, unique elimină toate duplicatele.
#include <list>
#include <print>
int main() {
std::list<int> v{1, 1, 2, 2, 2, 3, 1};
v.unique();
std::println("{}", v);
v.sort();
v.unique();
std::println("{}", v);
}
Rezultat
[1, 2, 3, 1]
[1, 2, 3]
Greșeli frecvente
- Te aștepți ca
unique()să elimine toate duplicatele dintr-o listă nesortată. Elimină doar repetițiile consecutive; apelează întâisort().
Comenzi înrudite
std::list: Listă dublu înlănțuită: inserare și ștergere rapidă oriunde, fără invalidarea celorlalte elemente, dar fără acces după poziție.std::list::sort: sort() sortează lista schimbând doar legăturile dintre noduri; reverse() inversează ordinea elementelor.std::erase_if: Șterge dintr-un container toate elementele egale cu o valoare (std::erase) sau care îndeplinesc o condiție (std::erase_if).std::unique: Elimină duplicatele aflate unul lângă altul; după sortare, elimină toate duplicatele.std::remove: Mută la final elementele egale cu o valoare și returnează noul sfârșit; ștergerea reală se face cu erase.