Heim  >  Artikel  >  Backend-Entwicklung  >  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
DDDOriginal
2024-10-30 02:42:02582Durchsuche

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";
}

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:

  • 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!

Stellungnahme:
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