Verstehen der Funktionalität von std::remove
In C arbeitet der std::remove-Algorithmus mit einer willkürlichen Sequenz, die durch zwei Vorwärtsbewegungen dargestellt wird Iteratoren. Sein Zweck besteht darin, Elemente innerhalb der Sequenz neu anzuordnen und nicht übereinstimmende Elemente nach vorne zu verschieben. Im Gegensatz zu std::erase werden bei Remove keine Elemente physisch aus dem Container gelöscht. Stattdessen werden sie neu organisiert.
Beispiel
Betrachten Sie den folgenden Codeausschnitt:
std::vector<int> a; a.push_back(1); a.push_back(2); std::remove(a.begin(), a.end(), 1); std::vector<int>::iterator iter = a.begin(); std::vector<int>::iterator endIter = a.end(); std::cout << "Using iter...\n"; for (; iter != endIter; ++iter) { std::cout << *iter << "\n"; } std::cout << "Using size...\n"; for (int i = 0; i < a.size(); ++i) { std::cout << a[i] << "\n"; }
Die Ausgabe lautet:
Using iter... 2 2 Using size... 2 2
Obwohl durch Entfernen das Element effektiv um 2 nach vorne verschoben wurde, bleibt die Größe des Vektors unverändert bei 2, da der nicht initialisierte Speicher nicht entfernt wurde.
Erase-Remove Idiom
Das Erase-Remove-Idiom kombiniert Remove und Erase, um unerwünschte Elemente physisch zu entfernen. Der Code:
a.erase(std::remove(a.begin(), a.end(), 1), a.end());
entfernt das Element 1 aus dem Vektor und reduziert seine Größe auf 1.
Anwendungsfälle von std::remove
Während die primäre Verwendung von „remove“ in der Erase-Remove-Sprache liegt, kann es auch in anderen Situationen verwendet werden, wie zum Beispiel:
Das obige ist der detaillierte Inhalt vonWie funktioniert std::remove in C und was ist der Unterschied zwischen std::remove und std::erase?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!