Heim > Backend-Entwicklung > C++ > Wie funktioniert std::remove in C und was ist der Unterschied zwischen std::remove und std::erase?

Wie funktioniert std::remove in C und was ist der Unterschied zwischen std::remove und std::erase?

DDD
Freigeben: 2024-10-30 02:42:02
Original
659 Leute haben es durchsucht

How does std::remove in C   function, and what is the difference between std::remove and std::erase?

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";
}
Nach dem Login kopieren

Die Ausgabe lautet:

Using iter...
2
2

Using size...
2
2
Nach dem Login kopieren

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());
Nach dem Login kopieren

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:

  • Identifizieren des letzten Vorkommens eines Elements: Durch Entfernen aller Vorkommen außer Im letzten Fall können Sie den von „remove“ zurückgegebenen Iterator verwenden, um das endgültige Erscheinungsbild zu bestimmen.
  • Erstellen einer neuen Sequenz mit eindeutigen Elementen: Durch Entfernen doppelter Elemente können Sie eine neue Sequenz erstellen, die nur die unterschiedlichen Elemente enthält.
  • Aufteilen einer Sequenz in zwei Teile: Mithilfe von Remove können Sie eine Sequenz in zwei Segmente aufteilen, von denen eines passende Elemente und das andere nicht übereinstimmende Elemente enthält.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage