„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum ordnet „std::remove“ Elemente in C++ neu an, anstatt sie zu löschen?

Warum ordnet „std::remove“ Elemente in C++ neu an, anstatt sie zu löschen?

Veröffentlicht am 19.11.2024
Durchsuche:376

  Why Does `std::remove` Rearrange Elements Instead of Deleting Them in C  ?

Den Unterschied verstehen: löschen vs. entfernen

Im Bereich der C-Programmierung sind std::erase und std::remove zwei unterschiedliche Funktionen, die unterschiedlichen Zwecken dienen, wenn es um die Änderung von Containern geht. Obwohl beide Funktionen zum Entfernen von Elementen aus einem Container verwendet werden können, unterscheiden sie sich in ihrem Verhalten.

Std::remove: Neuanordnen von Elementen vs. Löschen

Std:: Remove ist ein Algorithmus, der eine Reihe von Elementen bearbeitet und diese innerhalb des Containers neu anordnet. Es löscht keine Elemente direkt, sondern verschiebt nicht übereinstimmende Elemente über übereinstimmende. Dieser Prozess erstellt einen Cluster übereinstimmender Elemente am Anfang der Sequenz und nicht übereinstimmender Elemente am Ende.

Std::erase: Deleting Elements

On the Andererseits ist std::erase eine Funktion, die bestimmte Elemente aus einem Container entfernt und so dessen Größe effektiv reduziert. Es verwendet einen Bereich von Iteratoren als Argumente und löscht alle Elemente innerhalb dieses Bereichs, einschließlich der zum Entfernen markierten Elemente.

Die Ausgabe verstehen

Im bereitgestellten Codebeispiel: Folgende Beobachtungen können gemacht werden:

  1. Std::remove: Wenn std::remove ist Wird es ohne std::erase verwendet, werden die Elemente einfach neu angeordnet, wobei die Größe des Vektors unverändert bleibt. Daher führt die Iteration durch den Vektor zur Ausgabe von 2,2.
  2. Std::erase: Wenn std::erase in Verbindung mit std::remove verwendet wird, wird es entfernt die übereinstimmenden Elemente (in diesem Fall das einzelne Vorkommen von 1) und aktualisiert die Größe des Vektors entsprechend. Infolgedessen zeigt die Ausgabe nur 2.

Zusätzliche Hinweise zur Std::remove

  1. Verwendung außerhalb von Erase-Remove Idiom: Während std::remove häufig mit Erase als Teil von „erase-remove“ verwendet wird „Idiom“ kann es auch unabhängig verwendet werden. Dies ist in Szenarien nützlich, in denen die Entfernungsreihenfolge nicht entscheidend ist und das Hauptziel darin besteht, übereinstimmende und nicht übereinstimmende Elemente innerhalb des Containers zu trennen.
  2. Begründung für die Nichtlöschung: Das Design von std::remove, das kein Löschen beinhaltet, liegt an seiner Fähigkeit, mit beliebigen Vorwärtsiteratoren zu arbeiten. Solche Iteratoren haben möglicherweise nicht die Möglichkeit, Elemente zu löschen, daher die eingeschränkte Funktionalität von std::remove.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3