Контейнеры STL: Liste. Teil 4




Liste c ++, c ++ Liste, контейнеры C ++ STL , Standard Template Library, c ++ Behälter, bidirektionale Liste mit ++Im dritten Teil der Lehren aus der STL-Containern, Wir beendeten die Überprüfung der Vektoren, lassen Sie uns sagen, Typ Vektor<schweben> als Äquivalent einer Matrix von reellen Zahlen. Für diese "Arrays", um den Betrieb sehr schnell das Element für den Zugriff durchgeführt (Lese-Schreib) der Index und Einfügen, um ein Element zu Ende zu löschen Vektor. viel schlimmer (Leistung) die betriebs das Entfernen des Einsatzelementes durchgeführt irgendwo in der Mitte des Vektors, oder bewegliche Element von einer Position zu einer anderen.

beispielsweise, Vektorgröße 15 Betrieb für das 10. Element in Position zu bewegen 2 erfordert:

  • Denken Sie daran, in den Zwischen variable Element 10 Minuten;

  • für alle Elemente 9. bis 2. (umgekehrt, möglicherweise unter Verwendung der umgekehrten Iterator) Kopie die nächste Position (8 Kopiervorgänge);

  • zuvor in dem Zwischen variable Element gespeicherte wird in die Position kopiert 2;

insgesamt, für diese einfache Operation dauerte es uns 10 Kopiervorgänge. Jedes Element des Vektors, wie wir früher diskutiert, Es kann schwierig zu Fail-Verbundstruktur sein. Und sein - es ist eine zeitaufwendige Operation.

für “Sammlungen”, wobei der aktive Zugabe von geplanten, löschen und verschieben Elemente, STL-Bibliothek bietet eine andere Art von Container - doppelt verknüpfte Liste, Liste. Für einen solchen Zugriff auf die Container-Elemente (Lesen, Rekord) seriell, nicht so effektiv. Aber die Additionsoperation, zu löschen oder die Reihenfolge der Elemente zu ändern ist sehr schnell.

Iterator Liste Es ist kein direkter Zugang Iterator. daher ist es nichtgelten Betrieb +, , +=, -=, und Behälter nichtzulässigen Betrieb Indexierungs. Iteratoren für diese Behälter werden sequentiell Operationen bewegt ++ und.

Um die Arbeit mit einem solchen Behälter zu illustrieren, schreiben wir alle das gleiche Problem der alle Primzahlen zu finden,, nicht mehr als N (für Konsistenz und Vergleich zu früheren Versionen):

Hier ist die erste Hälfte des Codes (Betreiber << Eine Liste) Nur dekorative Umsetzung für die Diagnostik und Bequemlichkeit, und der Rest der folgenden erfolgt:

  • geformt Liste Liste<int> natürliche Zahlen reichen [2…N] – Linien 19 – 22;

  • für jede (übrig) Die Anzahl aller nachfolgenden Liste gelöscht mehrere Elemente, um es – Reihe 31;

  • Und so weiter, bis, Noch eine andere Anzahl getestet werden nicht übersteigt die Quadratwurzel von N – Reihe 26 (in der Zahlentheorie zeigt, Teilbarkeit, die nicht auf N-1 überprüft werden kann,, einer Reihe, größer ist als die Quadratwurzel von N);

Der Merkmale des Codes, und Containerliste allgemein, Sie müssen darauf achten, was, dass nach dem Entfernen des Elements, Zeigt den aktuellen Wert des Iterators, Iteratorwert wird unsicher. Wenn wir wollen, zu wiederholen, um fortzufahren, wir arbeiten müssen, um mit Eine Kopie Iterator (ich Code gezeigt in).

Der Code ausgeführt wird, können wir überprüfen, dass die Ergebnisse genau ähnlich wie bei früheren Versionen. Vor dem Programmstart, nicht zu vergessen die Befehle gleich Argument zu definieren 300, wie wir in der vorigen Lektion haben.
Liste c ++, c ++ Liste, контейнеры C ++ STL , Standard Template Library, c ++ Behälter, doppelt verknüpfte Liste

Newsletter neue Lektionen über die Programmierung:

Контейнеры STL: Liste. Teil 4
Bewerten Sie diesen Artikel

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.

Hinterlasse eine Antwort

Deine Email-Adresse wird nicht veröffentlicht. erforderliche Felder sind markiert *