Algorithmen. STL (Teil 10)

Bewerten Sie diesen Artikel




алгоритмы Größe, finden(), Kopieren(), copy_if(), Bewegung(), swap_ranges(), remove_copy(), remove_copy_if(), verschmelzen(), set_intersection(), set_difference()STL-Container wäre eine schöne Fiktion ziemlich weit von der praktischen Anwendung (wie es war in den ersten Jahren des Bestehens von STL), wenn nicht die folgende Tatsache: wegen der einzigen insgesamt Art des Behälters grundlegenden Algorithmen, von Interesse in der Praxis, Es kann in einer verallgemeinerten Form umgesetzt werden, für jeder Arten von Behältern. Algorithmen - ist der größte und der am meisten nachgefragten Teil der Bibliothek. Vorausgesetzt, so viele Algorithmen, daß für eine ausführliche Beschreibung von ihnen allen und nicht genug bulk Buch. Im Folgenden vollständig bedingt Wir teilen sie in Gruppen und rufen nach Name (und auch nicht alle), und nur für bestimmte Anwendungsfälle konstruieren.

für jede() Der am häufigsten verwendete Algorithmus - ist für jede(): Umsetzung von Maßnahmen für die Gruppen von Elementen (können alle) Behälter. Die folgende Abbildung zeigt einige Beispiele für den Algorithmus für jede() für eine Anordnung und Vektor, Ebenso kann dieser Algorithmus verwendet werden, jeder контейнером STL:

алгоритмы Größe, finden(), Graf(), count_if(), Suche(), binary_search(), min(), max(), minmax_element(), min_element(), max_element(), gleich()

Notiz: Linien 3 Es zeigt den Betrieb des neuen (eingeführt C ++ 11-Standard) Entwurf für( Auto &x : …), die hat einen ähnlichen Effekt Zuordnung und kann auf Arrays und Behälter angewendet werden (in-Bedienfunktion Ausgangsvektor in dem eine solche Strömung gezeigt eine Option). Diese Konstruktion, allgemein gesprochen, Es ist nicht Teil einer Bibliothek oder Algorithmen STL, aber es hat die gleiche Wirkung, dass Algorithmus for_each(): anwenden konsequent auf alle Elemente der Kollektion.

Dieses Beispiel zeigt die grundlegende Organisation der Logik alle Algorithmen: ein bestimmter Bereich (nicht notwendigerweise auf die gesamte Kollektion), begrenzt Iterator Anfang und Ende (oft gibt die ersten zwei Optionen) abwechselnd angewandt funktionieren, Funktors, oder Prädikat (Funktion, liefert ein Ergebnis logixchesky, so dass für die Auswahl eines beliebigen Boden).

finden() Weiter Algorithmus Bedeutung - es finden(). Wie intuitive Namen, eine Suche nach einem Element in der Sammlung. beachten Sie, viele Behälter haben Verfahren finden(), das ist ein Ziel genannt zu werden als obj.find(…), während Algorithmus Es wird aufgerufen, wie finden( obj:iteator, ... ).

richtig, es ist nicht eine, dieser Algorithmus, sondern eine ganze Gruppe von ihrer umfangreichen, die auf der Basis können in Kombination von, was sie ausgewählt Elemente einer Sammlung auf einigen Gründen, Zustand, Prädikat: finden(), find_if(), find_if_not(), find_first_of(), find_end(), adjacent_find(). In der gleichen Gruppe, mit einer gewissen Strecke, zurückgeführt werden kann Graf(), count_if(), Suche(), binary_search(), min(), max(), minmax_element(), min_element(), max_element(), gleich() usw.

Eine andere herkömmliche Gruppe - Algorithmen, in gewisser Weise "tasuyuschie" Sammlung, permutieren Elemente in Orte, Wertewandel: füllen(), replace_copy(), umkehren(), drehen(), rotate_copy(), Shuffle(), random_shuffle(), verwandeln(), ersetzen(), replace_if() usw.

Weitere Künstler - dieser Algorithmus arbeitet mit 2 Sammlungen, zuZeichnen und Bewegen Inhalt (außerdem, möglicherweise, zwischen den verschiedenen Arten von Sammlungen, beispielsweise, Vektor<> in Set<>): Kopieren(), copy_if(), Bewegung(), swap_ranges(), remove_copy(), remove_copy_if(), verschmelzen(), set_intersection(), set_difference() usw.

und, schließlich, ganz besondere Gruppe von Algorithmen ist mit einer Vielzahl von zugehörigen Sortierungen Elemente innerhalb der Sammlung: Sortieren(), stable_sort(), is_sorted(), is_sorted_until() usw. Diese interessante Gruppe von uns beiseite, für separate detaillierte Betrachtung.

Mit einer solchen Fülle von implementierten Algorithmen und deren Anzahl mit der Zeit zunimmt Bibliothek, und dass, dass die meisten von ihnen nicht wirklich nirgendwo in der Literatur beschrieben, die Frage stellt sich natürlich: wie all diese Vielfalt zu verstehen? Diese Schwierigkeiten werden entfernt, so dass:

  • Alle STL-Objekte (Behälter, Algorithmen) in Syntaxmuster beschrieben (Vorlage). Daher ihre Beschreibungen notwendigerweise Sie sollten in der kompilierten Code als Teil ihrer Header-Dateien enthalten sein, (Header-Dateien).

  • Gehen Sie in das Standardverzeichnis </usr / include / c ++> und finden Sie die Header-Dateien der Formulardateien stl_algo * - Hier finden Sie alle Funktionen finden Prototypen Algorithmen. Außerdem, wird jeder Prototyp durch eine gründliche voran Kommentar, Erläuterung der Zweck des Algorithmus, und erklärt die Call-Optionen.

  • Betrachten Sie den Beispielcode, mit einigen BASICx STL-Algorithmen - viele von ihnen im Netz. In Analogie elementar und einfach das Verhalten zu reproduzieren alle die anderen Algorithmen.

Notiz: Dies ist aufgrund der Tatsache, dass die Bibliothek von Schablonen Klassen sind in Bezug auf definierte Vorlage, etwa sind Syntaxfehler eine Kompilation). mnogoslovnыmi, für zehn Zeilen von Nachrichten und b). schrecklich vage Fehler zu finden. Das ist die Kehrseite eines solchen leistungsfähigen Mechanismus, wie die Vorlage, und dies sollte bereit sein,.

Wie ich bereits erwähnt, Fallstudien werden eine Menge Fragen zu entfernen, und daher an den Code fortfahren … Jetzt beobachten sorgfältig für die Hände (STL ist ein Satz von Algorithmen, dass jeder Kommentar – über eine angemessene Darstellung des Volumens, aber sie alle arbeiten wie einander):

Hier Behälter verwendet für verkohlen (so kompakt, aber die unangenehmste Arbeit), über welche laufen für fast alle bezeichneten Gruppen eine Vielzahl von Algorithmen:

алгоритмы Größe, finden(), Graf(), count_if(), Suche(), binary_search(), min(), max(), minmax_element(), min_element(), max_element(), gleich()

Newsletter neue Lektionen über die Programmierung:

Öl

Etwa Öl

praktische Erfahrungen über die Softwareentwicklung 40 Jahre. Lehrer Globale Logik internationales Softwareunternehmen. IBM Developer Works Permanent Autor von Publikationen. Wissenschaftliche Herausgeber der Computerliteratur-Verlag "Symbol-Plus", Sankt Petersburg.

3 Gedanken zu "Algorithmen. STL (Teil 10)

Hinterlasse eine Antwort

Platz Code in Tags: <pre class="lang:c ++ dekodieren:true ">DEIN CODE</Vor>