Was ist der Unterschied zwischen einem Vektor und einem Array in C++?

Was ist der Unterschied zwischen einem Vektor und einem Array in C++?
Es gibt viele Unterschiede zwischen einem Vektor und einem Array in C++. Die wichtigsten Ähnlichkeiten sind jedoch sehr wichtig. Die wichtigsten Ähnlichkeiten sind, dass sie beide eine Liste sind, und jeder würde eine Abfolge von Daten desselben Typs enthalten. Die Hauptunterschiede sind wie folgt: Die Größe eines Vektors (Länge) kann natürlich erhöht werden, aber die eines Arrays ist festgelegt und kann nicht erhöht werden. Elemente können in einen Vektor eingefügt werden, können jedoch nicht in ein Array eingefügt werden. Elemente können am Ende des Vektors angehängt werden, können jedoch nicht am Ende des Arrays angehängt werden. Der Vektor ist eine Klasse, aus der andere Vektorobjekte instanziiert sind, aber das Array ist ein konstanter Zeiger auf eine Datensequenz desselben Typs. Der Vektor verfügt über Methoden (Mitgliedsfunktionen), das Array jedoch nicht, und so wird der Vektor als Datenstruktur bezeichnet. Während der Zeiger mit dem Array verwendet werden kann, werden Iteratoren mit dem Vektor verwendet. Ein Iterator ist ein ausgefeilter Zeiger.

Vor dem Array kann kein Element enthalten sein. Bei C ++ 17 und höher kann ein Element mit der EMPLAP () -Member -Funktion vor dem Vektor enthalten sein.

Für den Rest dieses Artikels werden Unterschiede zwischen dem Vektor und dem Array veranschaulicht. Für jeden Punkt wird die Unfähigkeit des Arrays erwähnt, oder seine stumpfe oder umständliche Art, dasselbe Ziel zu erreichen.

Artikelinhalt

  • Erstellen eines Vektors oder Arrays
  • Zunehmende Größe
  • Einfügen
  • Angehängt
  • Ein Element löschen
  • Klar
  • Tauschen
  • Größe
  • Abschluss

Erstellen eines Vektors oder Arrays

Ein Vektor kann auf verschiedene Weise erstellt werden. Der grundlegende Weg ist wie folgt:

Vektor vtr = 'a', 'b', 'c', 'd', 'e';

Entsprechend würde ein Array wie folgt erstellt:

char arr [] = 'a', 'b', 'c', 'd', 'e';

Beachten Sie die Differenz in den Operanden, die sich links vom Zuordnungsbetreiber befinden. Die Anzahl der Elemente für den Vektor kann dann hinzugefügt oder reduziert werden, aber die Größe des Arrays bleibt in diesem Fall um 5 Uhr fest.

Um einen Vektor in einem Programm zu haben und zu verwenden, sollte das Programm mit:

#enthalten
Verwenden von Namespace STD;

Um ein Array in einem Programm zu haben und zu verwenden, ist keine Präprozessoranweisung erforderlich.

Zunehmende Größe

Der folgende Code zeigt, wie ein Vektor von zunächst zwei Elementen auf vier Elemente erhöht wird, wobei die Funktion Push_back () unter Verwendung von Member -Funktionen auf vier Elemente erhöht wird:

Vektor vtr (2);
vtr [0] = 'a';
vtr [1] = 'B';
vtr.push_back ('c');
vtr.push_back ('d');

Dieser Code sollte in einer Funktionskörper vorhanden sein. Erstellen Sie für das Array und da das Array eine feste Größe hat, erstellen Sie ein Array für die maximale Anzahl der vorgesehenen Elemente, bevor Sie die Elemente mit dem [] Operator hinzufügen. Beispiel:

char arr [4];
arr [0] = 'a';
arr [1] = 'b';
// Elemente hinzufügen
arr [2] = 'c';
arr [3] = 'd';

Außerdem sollte sich dieser Code in einem Funktionskörper befinden.

Einfügen

Im folgenden Code wird ein Element vor dem Element eingefügt, auf das der Iterator P: P:

vectorVtr = 'a', 'b', 'd', 'e';
Vektor :: Iterator p = vtr.Start();
++P;
++P;
char ch = 'c';
vtr.Insert (p, ch);
für (int i = 0; iCout<

Die Ausgabe ist:

A b c d e

Die erste Anweisung des Code erstellt das Vektorobjekt. 'C', das nach alphabetischer Ordnung vor 'D' hätte sein müssen, fehlt hier nicht. Die zweite Erklärung gibt einen Iterator zurück, der auf das erste Element des Vektors verweist. Die nächsten beiden Aussagen erhöhen den Zeiger auf 'D'. Die Anweisung nach dem Nachweis von CH zugewiesen CH 'C'. In diesem Codesegment fügt die letzte Anweisung 'C' vor 'D' mit dem Iterator ein.

Was das Array betrifft, kann ein Element auf keinen Fall eingefügt werden. Aufgrund solcher Einschränkungen für das Array wurden der Vektor und andere Behälter entworfen.

HINWEIS: Die Funktion Insert () kann auch verwendet werden, um ein Element vor einem Vektor einzufügen.

Angehängt

Anhängen bedeutet, Elemente auf der Rückseite hinzuzufügen. Mit der Member -Funktion push_back () können Elemente auf der Rückseite des Vektors hinzugefügt werden - siehe oben. Das Array kann nicht angehängt werden. Die einzige Möglichkeit, dieses Problem für das Array zu umgehen. Elemente von Anfang an eingeben. Dann werden im Array ein Raum (Zellen) zurückgelassen. Wenn dann auf der Rückseite Elemente hinzugefügt werden müssen, passen Sie die Elemente (Werte) in die Leerzeichen, die leer sind (die Standardwerte haben).

Ein Element löschen

Für den Vektor kann ein Element mit dem Iterator gelöscht werden. Der Iterator verweist dann auf das nächste Element, das vor der Löschung dort war. Der folgende Code löscht 'B':

vectorVtr = 'a', 'b', 'c', 'd', 'e';
Vektor :: Iterator q = vtr.Start();
++Q;
vtr.löschen (q);
für (int i = 0; iCout<
Cout<Cout<< *q <Die Ausgabe ist:

A c d e
C

Kein Element des Arrays kann gelöscht werden, obwohl es geändert werden kann.

Klar

Alle Elemente des Vektors können mit seiner Mitgliedsfunktion Clear () wie folgt entfernt werden:

vectorVtr = 'a', 'b', 'c', 'd', 'e';
vtr.klar();
für (int i = 0; iCout<

Die Ausgabe ist nichts. Das Beste mit dem Array ist, alle Elemente durch einen Standardwert zu ersetzen. Mit der Ganzzahl beträgt der Standardwert 0. Der folgende Code zeigt:

int arr [] = 1, 2, 3, 4, 5;
für (int i = 0; i<5; i++)
arr [i] = 0;

für (int i = 0; i<5; i++)
Cout<

Die Ausgabe ist:

0 0 0 0 0

Mit dem Zeichen ist der Standardwert der NUL -Zeichen \ 0. Der folgende Code zeigt:

char arr [] = 'a', 'b', 'c', 'd', 'e';
für (int i = 0; i<5; i++)
arr [i] = '\ 0';

für (int i = 0; i<5; i++)
Cout<

Die Ausgabe zeigt nichts.

Tauschen

Auch wenn zwei Vektoren nicht gleich groß sind, können ihre Elemente mit der SWAP () -Mitglied -Funktion getauscht werden. Der folgende Code zeigt dies:

Vektor vtr1 = 'a', 'b', 'c', 'd', 'e';
Vektor vtr2 = 'f', 'g', 'H';
vtr1.Swap (vtr2);
Cout<< "Content of new vtr1:" <für (int i = 0; iCout<< vtr1[i] << ";

Cout<Cout<< "Content of new vtr:" <für (int i = 0; iCout<< vtr2[i] << ";

Damit zwei Arrays ausgetauscht werden müssen, müssen sie von der gleichen Länge sein. Das Array hat keine Mitgliederfunktionen (keine Methoden). Um Elemente gegen Arrays auszutauschen, sollte ein Code wie folgt geschrieben werden:

char arr1 [] = 'a', 'b', 'c', 'd', 'e';
char arr2 [] = 'f', 'g', 'h', 'i', 'j';
für (int i = 0; i<5; i++)
char temp = arr1 [i];
arr1 [i] = arr2 [i];
arr2 [i] = temp;

Cout<< "Content of new arr1:" <für (int i = 0; i<5; i++)
Cout<< arr1[i] << ";

Cout<Cout<< "Content of new arr2:" <für (int i = 0; i<5; i++)
Cout<< arr2[i] << ";

Die Ausgabe ist:

Inhalt von New ARR1:
F g h i j
Inhalt von New ARR2:
A b c d e

Größe

Die Größe des Vektors wird durch seine Mitgliedsfunktion Size () zurückgegeben. Das heißt, es wird zur Laufzeit bestimmt. Illustration:

vectorVtr = 'a', 'b', 'c', 'd';
int sz = vtr.Größe();
Cout<Die Ausgabe ist 4. Die Größe des Arrays muss am Anfang angegeben werden, wie der folgende Code zeigt:

char arr [4] = 'a', 'b', 'c', 'd';

Es kann auch so gemacht werden:

char arr [7] = 'a', 'b', 'c', 'd';

Das heißt, eine Zahl (Größe) zu setzen, die höher ist als die vermeintliche Größe (in diesem Fall 4). Die Zahl sollte jedoch nicht kleiner als die Anzahl der anfänglichen Elemente sein.

Variabler Länge Array

Die Größe des Arrays kann jedoch zur Laufzeit verabreicht werden (nicht bestimmt) werden. In diesem Fall muss das Array in einer Funktion oder in einem ähnlichen Konstrukt erstellt werden. Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
void fn (int n)
char arr [n];
arr [0] = 'a';
arr [1] = 'b';
arr [2] = 'c';
arr [3] = 'd';
für (int i = 0; iCout<
Cout<
int main ()

fn (4);
Rückkehr 0;

Die Ausgabe ist:

A B C D

Abschluss

Die Hauptunterschiede zwischen dem Vektor und dem Array sind wie folgt: Die Größe (Länge) eines Vektors kann natürlich erhöht werden, aber die eines Arrays ist festgelegt und kann nicht erhöht werden. Elemente können in einen Vektor eingefügt werden, können jedoch nicht in ein Array eingefügt werden. Elemente können am Ende des Vektors angehängt werden, können jedoch nicht am Ende des Arrays angehängt werden. Der Vektor ist eine Klasse, aus der andere Vektorobjekte instanziiert sind, aber das Array ist ein konstanter Zeiger auf eine Datensequenz desselben Typs. Der Vektor verfügt über Methoden (Mitgliedsfunktionen), das Array jedoch nicht, und so wird der Vektor als Datenstruktur bezeichnet. Während der Zeiger mit dem Array verwendet werden kann, werden Iteratoren mit dem Vektor verwendet. Ein Iterator ist ein ausgefeilter Zeiger. Das Array zeigt entweder seine Unfähigkeit oder hat eine stumpfe oder umständliche Art, das gleiche Ziel für jeden Unterschied zu erreichen.