In dieser Lektion wir werden uns die Container und Iteratoren ansehen, und beginnen Sie mit einem Standardvektor. Der Vektor ist eine Antwort auf atriale Probleme mit C- und C++-Arrays. Nämlich die Anzahl der Elemente, die möglicherweise verzerrt werden müssen im Container ist nicht fixiert und ist möglicherweise auch nicht im Voraus bekannt. Sie können also nicht die genaue Anzahl der Elemente zuordnen im Array, aber die Elemente müssen zugänglich sein auf die effizienteste Weise. Geben Sie hier den Standardvektor ein. Schauen wir uns das Beispiel an. In diesem Beispiel werden drei Vektoren konstruiert. Eins ist ein Standard ohne Größe, einer mit Größe, aber ohne Elemente, und die dritte unter Verwendung der Standard-Race-Initialisierung. Dies wird einen Vektor an Ort und Stelle konstruieren mit den in der Liste eingestellten Werten. Lassen Sie uns nun das Beispiel erstellen und ausführen. Schauen wir uns zuerst das Element an, Hinzufügen eines Elements des Vektors mit der Methode pushback. Wie Sie sich vorstellen können, fügt sich das Element per Pushback hinzu wird zugewiesen und am Ende des Vektors hinzugefügt, Vergrößern des Vektors und Bereitstellen des Elements. Und genau das sehen wir in der Ausgabe dieses Programms. Im zweiten Fall lass es uns auskommentieren und verwende Testvektor zwei, bauen und ausführen. Und mit Testvektor zwei, Wir sehen, dass die Anfangsgröße des Vektors 10 beträgt. Und dann können wir das Element tatsächlich setzen mit eckigen Klammern oder dem Referenzierungsoperator. Wir können das Element null tatsächlich auf den Wert 15 setzen. Und das sehen wir in der Ausgabe der zweiten Zeile für Testvektor zwei. Die letzten Benutzer, über die wir sprechen werden ist, wie auf das Element des Vektors zugegriffen wird. Es gibt tatsächlich zwei Beispiele dafür, wie dies gemacht wird. Das erste Beispiel verwendet für jeden etwas Ähnliches, das ist im Grunde die for-Schleife, die sich bewegt durch die Werte innerhalb des Vektors, und gibt dann ihre Werte aus. Viertens werden wir sehen, dass wir Indizes verwenden. Also lass es uns jetzt bauen. Und wir bekommen auch eine Verwarnung. Die Warnung hier klingt aus der Tatsache, dass ich erkläre Variable i als Integer, der Typ zugewiesen ist, aber die größe muss nicht gehen in den negativen Bereich. Also der Wert für die Größe, der Rückgabetyp der Größe ist tatsächlich der Größentyp, der normalerweise nicht signiert ist, aber wir können den gleichen Größentyp anstelle des int verwenden und wir können es so machen. Verwenden Sie den Größentyp, Größentyp wird eigentlich als Typ deklariert innerhalb einer Vektorvorlage, um zu definieren, welcher Typ wird in diesem Vektor als Größentyp verwendet. Und normalerweise ist es ein size_t. Aber lass uns das bauen, und lass es uns laufen lassen. Und wie Sie sehen, beträgt die Anfangsgröße des Vektors 10, das ist eins, zwei, drei, vier, fünf, sechs, sieben, acht, neun, 10. Und die Werte sind eins, zwei, drei, vier, fünf, sechs, sieben, acht, neun, 10, entweder mit der Wertiteration oder mit dem Index. Es gibt andere Wege und Methoden des Zugriffs auf und der Verwendung von Vektoren aber diese gehen über den Rahmen dieses speziellen Abschnitts hinaus, obwohl ich darauf hinweisen sollte, weil Vektor ist eine Erweiterung der Funktionalität des Arrays, der für den Vektor zugewiesene Speicher ist zusammenhängend ermöglicht einen schnellen Datenzugriff, aber mit Nachteilen, wenn es kommt zu zugewiesenem und freigegebenem Speicher. Da der Speicher für den Vektor zusammenhängend sein muss, zugewiesener Speicher bei Anrufen wie Pushback oder in Playbacks könnte teuer werden wenn der zum Anhängen benötigte Speicher möglicherweise nicht verfügbar ist direkt am Ende des Vektors. Und der gesamte Vektor muss möglicherweise verschoben werden vom ursprünglichen Standort zum neuen. Und wenn die Anzahl der Elemente klein ist, Es kann nicht so viel Einfluss haben, aber wenn die Anzahl der Elemente groß ist, dann könnte ein Umzug teuer werden. Ähnliches passiert, wenn Sie den Vektor löschen. Da die Inhalte zusammenhängend sein müssen, alle Elemente hinter dem gelöschten Element nach vorne verschieben müssen, was den Zeitaufwand verursacht. Es gibt Möglichkeiten, das erste Problem zu umgehen, aber es gibt keine Möglichkeit, die zweite leicht zu umgehen. Schauen wir uns also die Warteschlange an.