I. Was ist vector?

Ein vector ist ein Sequenzcontainer, der ein dynamisch dimensioniertes Array kapselt. Wie jeder andere Containertyp kann er Objekte verschiedener Typen speichern. Man kann ihn einfach als dynamisches Array betrachten, das Elemente beliebigen Typs aufnehmen kann.


II. Container-Eigenschaften

1. Geordnete Sequenz

Elemente in einem Sequenzcontainer sind in einer strengen linearen Reihenfolge angeordnet. Auf das entsprechende Element kann über seine Position in der Sequenz zugegriffen werden.

2. Dynamisches Array

Unterstützt schnellen direkten Zugriff auf jedes Element in der Sequenz, und dies kann sogar über Zeigerarithmetik erfolgen. Es bietet relativ schnelles Hinzufügen/Löschen von Elementen am Ende der Sequenz.

3. Allocator-bewusst

Der Container verwendet ein Allocator-Objekt, um seinen Speicherbedarf dynamisch zu verwalten.


III. Implementierung grundlegender Funktionen

1. Konstruktoren
  • vector(): erstellt einen leeren Vektor
  • vector(int nSize): erstellt einen Vektor mit nSize Elementen
  • vector(int nSize, const t& t): erstellt einen Vektor mit nSize Elementen, alle mit dem Wert t
  • vector(const vector&): Kopierkonstruktor
  • vector(begin,end): kopiert Elemente aus einem anderen Array im Bereich [begin,end) in den Vektor

2. Funktionen zum Hinzufügen

  • void push_back(const T& x): fügt ein Element X am Ende des Vektors hinzu
  • iterator insert(iterator it, const T& x): fügt ein Element x vor das Element ein, auf das der Iterator im Vektor zeigt
  • iterator insert(iterator it, int n, const T& x): fügt n identische Elemente x vor das Element ein, auf das der Iterator im Vektor zeigt
  • iterator insert(iterator it, const_iterator first, const_iterator last): fügt Daten aus einem anderen Vektor desselben Typs im Bereich [first,last) vor das Element ein, auf das der Iterator im Vektor zeigt

3. Funktionen zum Löschen

  • iterator erase(iterator it): löscht das Element, auf das der Iterator im Vektor zeigt
  • iterator erase(iterator first, iterator last): löscht Elemente im Vektor im Bereich [first,last)
  • void pop_back(): löscht das letzte Element im Vektor
  • void clear(): löscht alle Elemente im Vektor

4. Traversierungsfunktionen

  • Referenz at(int pos): gibt eine Referenz auf das Element an Position pos zurück
  • Referenz front(): gibt eine Referenz auf das erste Element zurück
  • Referenz back(): gibt eine Referenz auf das letzte Element zurück
  • Iterator begin(): gibt den Kopfzeiger des Vektors zurück, der auf das erste Element zeigt
  • Iterator end(): gibt den Endzeiger des Vektors zurück, der auf die Position nach dem letzten Element zeigt
  • reverse_iterator rbegin(): umgekehrter Iterator, der auf das letzte Element zeigt
  • reverse_iterator rend(): umgekehrter Iterator, der auf die Position vor dem ersten Element zeigt

5. Prüffunktionen

  • bool empty() const: bestimmt, ob der Vektor leer ist; wenn leer, hat der Vektor keine Elemente

6. Größenfunktionen

  • int size() const: gibt die Anzahl der Elemente im Vektor zurück
  • int capacity() const: gibt die maximale Anzahl von Elementen zurück, die der aktuelle Vektor aufnehmen kann
  • int max_size() const: gibt die maximal zulässige Anzahl von Elementen im Vektor zurück

7. Weitere Funktionen

  • void swap(vector&): vertauscht die Daten zweier Vektoren desselben Typs
  • void assign(int n, const T& x): setzt die Werte der ersten n Elemente im Vektor auf x
  • void assign(const_iterator first, const_iterator last): setzt die Elemente im Vektor auf die Elemente in [first,last)

8. Zur Verdeutlichung

1. push_back: fügt ein Datenelement am Ende des Arrays hinzu

2. pop_back: entfernt das letzte Datenelement aus dem Array

3. at: ruft die Daten an der nummerierten Position ab

4. begin: ruft den Zeiger auf den Anfang des Arrays ab

5. end: ruft den Zeiger auf ein Element nach dem letzten Element des Arrays ab

6. front: liefert eine Referenz auf den Kopf des Arrays

7. back: liefert eine Referenz auf das letzte Element des Arrays

8. max_size: liefert die maximal mögliche Größe des Vektors

9. capacity: die aktuell zugewiesene Größe des Vektors

10. size: die Größe der aktuell verwendeten Daten

11. resize: ändert die Größe der aktuell verwendeten Daten; ist sie größer als die aktuelle Nutzung, werden Standardwerte eingefügt

12. reserve: ändert die Größe des aktuell für den Vektor zugewiesenen Speicherplatzes

13. erase: löscht das Datenelement, auf das der Zeiger zeigt

14. clear: leert den aktuellen Vektor

15. rbegin: gibt den Startzeiger des umgekehrten Vektors zurück (eigentlich: ursprüngliches end - 1)

16. rend: gibt den Endzeiger des umgekehrten Vektors zurück (eigentlich: ursprüngliches begin - 1)

17. empty: bestimmt, ob der Vektor leer ist

18. swap: tauscht Daten mit einem anderen Vektor aus


IV. Grundlegende Verwendung

#include < vector> 
using namespace std;

V. Kurze Einführung

  1. Vector<type> Bezeichner
  2. Vector<type> Bezeichner(maximale Kapazität)
  3. Vector<type> Bezeichner(maximale Kapazität, Anfangswerte für alle)
  4. Int i[5]={1,2,3,4,5}
    Vector<type> vi(I, i+2); // den Wert nach dem Indexwert i abrufen, i ist 3
  5. Vector< vector< int> >v; // zweidimensionaler Vektor. Hinweis: Das äußere <> muss ein Leerzeichen haben; andernfalls lässt es sich auf älteren Compilern nicht kompilieren.

Beispiel

1. pop_back() & push_back(elem) Beispiel: Entfernen und Einfügen von Daten am Ende des Containers

Beispiel

#include <string.h> #include <vector> #include <iostream> using namespace std; int main() { vector<int>obj;// einen Vektor-Speichercontainer int erstellen for(int i=0;i<10;i++) // push_back(elem) fügt Daten am Ende des Arrays hinzu { obj.push_back(i); cout<<obj[i]<<","; } for(int i=0;i<5;i++)// entfernt das letzte Datenelement aus dem Array { obj.pop_back(); } cout<<"\n"<<endl; for(int i=0;i<obj.size();i++)// size(): die tatsächliche Anzahl der Datenelemente im Container { cout<<obj[i]<<","; } return 0; }

Das Ausgabeergebnis ist:

0,1,2,3,4,5,6,7,8,9,

0,1,2,3,4,

2. clear() löscht alle Daten im Container

Beispiel

#include <string.h> #include <vector> #include <iostream> using namespace std; int main() { vector<int>obj; for(int i=0;i<10;i++)// push_back(elem) fügt Daten am Ende des Arrays hinzu { obj.push_back(i); cout<<obj[i]<<","; } obj.clear();// alle Daten im Container löschen for(int i=0;i<obj.size();i++) { cout<<obj[i]<<endl; } return 0; }

Das Ausgabeergebnis ist:

0,1,2,3,4,5,6,7,8,9,

3. Sortieren

Beispiel

#include <string.h> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main() { vector<int>obj; obj.push_back(1); obj.push_back(3); obj.push_back(0); sort(obj.begin(),obj.end());//Von klein nach groß cout<<"Von klein nach groß:"<<endl; for(int i=0;i<obj.size();i++) { cout<<obj[i]<<","; } cout<<"\n"<<endl; cout<<"Von groß nach klein:"<<endl; reverse(obj.begin(),obj.end());//Von groß nach klein for(int i=0;i<obj.size();i++) { cout<<obj[i]<<","; } return 0; }

Das Ausgabeergebnis ist:

从小到大:
0,1,3,

从大到小:
3,1,0,

1. Beachten Sie, dass sort eine Header-Datei erfordert#include <algorithm>

2. Wenn Sie möchten, dass sort in absteigender Reihenfolge sortiert, können Sie sort umschreiben

bool compare(int a,int b) 
{ 
    return a< b; //升序排列,如果改为return a>b,则为降序 
} 
int a[20]={2,4,1,23,5,76,0,43,24,65},i; 
for(i=0;i<20;i++) 
    cout<< a[i]<< endl; 
sort(a,a+20,compare);

4. Zugriff (direkter Array-Zugriff & Iterator-Zugriff)

Beispiel

#include <string.h> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main() { //Sequenzieller Zugriff vector<int>obj; for(int i=0;i<10;i++) { obj.push_back(i); } cout<<"Direkte Verwendung von Arrays:"; for(int i=0;i<10;i++)//Methode 1 { cout<<obj[i]<<" "; } cout<<endl; cout<<"Verwendung von Iteratoren:" ; //Methode 2: Iteratoren verwenden, um die Daten im Container auszugeben vector<int>::iterator it;//Deklarieren Sie einen Iterator für den Zugriff auf den vector-Container, der verwendet wird, um: Elemente des vector-Containers zu durchlaufen oder auf sie zu zeigen for(it=obj.begin();it!=obj.end();it++) { cout<<*it<<" "; } return 0; }

Das Ausgabeergebnis ist:

直接利用数组:0 1 2 3 4 5 6 7 8 9 
利用迭代器:0 1 2 3 4 5 6 7 8 9

5. Zwei Methoden zum Definieren eines zweidimensionalen Arrays (gleiches Ergebnis)

Methode 1

#include <string.h> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main() { int N=5, M=6; vector<vector<int> > obj(N); //Definieren Sie ein zweidimensionales dynamisches Array mit 5 Zeilen for(int i =0; i< obj.size(); i++)//Dynamisches zweidimensionales Array mit 5 Zeilen und 6 Spalten, alle Werte sind 0 { obj[i].resize(M); } for(int i=0; i< obj.size(); i++)//Geben Sie das zweidimensionale dynamische Array aus { for(int j=0;j<obj[i].size();j++) { cout<<obj[i][j]<<" "; } cout<<"\n"; } return 0; }

Methode 2

#include <string.h> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main() { int N=5, M=6; vector<vector<int> > obj(N, vector<int>(M)); //Definiere ein zweidimensionales dynamisches Array mit 5 Zeilen und 6 Spalten for(int i=0; i< obj.size(); i++)//Geben Sie das zweidimensionale dynamische Array aus { for(int j=0;j<obj[i].size();j++) { cout<<obj[i][j]<<" "; } cout<<"\n"; } return 0; }

Das Ausgabeergebnis ist:

0 0 0 0 0 0 
0 0 0 0 0 0 
0 0 0 0 0 0 
0 0 0 0 0 0 
0 0 0 0 0 0 

Originaladresse: http://blog.csdn.net/w_linux/article/details/71600574