Verwirrt über Vektoren

8

Vorher habe ich gelernt, in der Schule zu programmieren (Vektoren, Buchstaben, zweidimensionale Arrays, nichts zu ausgefallenes) und habe in C ++ in CodeBlocks programmiert. Vor einem Monat fing ich an, von C ++ Primer zu lernen. Ich bin jetzt bei Vektor-Typen und ich habe alles verwirrt. Wenn ich Vektoren benutzt habe, habe ich nie eine andere Bibliothek hinzugefügt und den Vektor so erklärt:

%Vor%

Nun wird ein Vektor viel komplizierter definiert, indem die vector -Bibliothek verwendet wird, der Elementtyp in der Definition erwähnt wird und so weiter.

Ich habe mich nur gefragt, wie es so einen großen Unterschied im Thema gibt, dachte ich ziemlich einfach. Was ist wirklich los mit diesen Vektoren?

    
Jake Wright 05.01.2018, 14:34
quelle

3 Antworten

13
___ qstnhdr ___ Verwirrt über Vektoren ___ qstntxt ___

Vorher habe ich gelernt, in der Schule zu programmieren (Vektoren, Buchstaben, zweidimensionale Arrays, nichts zu ausgefallenes) und habe in C ++ in CodeBlocks programmiert. Vor einem Monat fing ich an, von C ++ Primer zu lernen. Ich bin jetzt bei Vektor-Typen und ich habe alles verwirrt. Wenn ich Vektoren benutzt habe, habe ich nie eine andere Bibliothek hinzugefügt und den Vektor so erklärt:

%Vor%

Nun wird ein Vektor viel komplizierter definiert, indem die int v[10] -Bibliothek verwendet wird, der Elementtyp in der Definition erwähnt wird und so weiter.

Ich habe mich nur gefragt, wie es so einen großen Unterschied im Thema gibt, dachte ich ziemlich einfach. Was ist wirklich los mit diesen Vektoren?

    
___ answer48115789 ___

Weil das nicht wirklich, wirklich Vektoren sind.

In C ++, wenn Leute "Vektor" sagen, beziehen sie sich meistens auf einen STL-Container, int v[10] . Es ist im Wesentlichen ein dynamisches Array, das bequem zu verwenden und leistungsstark ist.

Sie haben ein einfaches Array mit fester Länge geschrieben. Es hat sehr eingeschränkte Funktionalität. Wenn Sie ein Array haben, das für 10 Elemente definiert ist, können Sie es später nicht mehr ändern, sodass es 11 Elemente enthalten kann. Die Größe ist statisch.

Um den %code% -Container zu verwenden, fügen Sie zuerst den entsprechenden Header hinzu:

%Vor%

Es ist eine Vorlagenklasse, daher müssen Sie beim Definieren einer Instanz einen Typ vorschlagen:

%Vor%

Sie können dann verschiedene Dinge tun, denn es ist eine Art dynamisches Array:

%Vor%

Beachten Sie, dass Sie die Größe eines Arrays nicht ändern können. Obwohl dynamische Zuweisung eine Alternative ist, würden Sie bald damit herumspielen.

Sie können auch einen Vektor direkt kopieren, ohne eine Schleife zu schreiben, wenn Sie mit Arrays arbeiten:

%Vor%

Vektoren können auch von Funktionen zurückgegeben werden, während Arrays nicht:

%Vor%

Diese Antwort ist nur eine vage Einleitung, die Ihnen helfen sollte, die Grundlagen zu beseitigen. Sie können auf den obigen Link für weitere Informationen verweisen.

    
___ answer48115877 ___

Die Verwirrung hier kommt von mehreren "Namenskollisionen" in C ++ und seiner Standardbibliothek.

  • C ++ hat eingebaute Objekte namens arrays . Die Variable %code% in Ihrem Programm hat den Typ "Array von zehn Ganzzahlen".
  • Andere Programmiersprachen beziehen sich auf Arrays als Vektoren , die Dozenten, die mit mehreren Programmiersprachen vertraut sind, dazu bringen, C ++ - Arrays "Vektoren" zu nennen. Dies ist, was Ihr Kursleiter getan hat, obwohl es nicht mit C ++ Nomenklatur von Typen übereinstimmt.
  • C ++ Standard Library definiert eine Vorlagenklasse namens %code% . Dies nennt Ihr Buch "Vektoren", was korrekt ist.
  • Die C ++ Standardbibliothek definiert eine weitere Vorlagenklasse mit dem Namen %code% , um Arrays mit fester Größe darzustellen. Dies führt zu einer Verwechslung mit integrierten C ++ - Arrays.

Um Verwechslungen zu vermeiden, beziehen Sie sich auf %code% als "integriertes Array", %code% auf "Array-Container" und %code% auf "Vektor".

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ tag123c11 ___ C ++ 11 ist eine 2011 verabschiedete Version des C ++ - Sprachstandards. Sie hat viele Änderungen und Ergänzungen in der Kernsprache sowie der verbesserten und erweiterten C ++ - Standardbibliothek vorgenommen. ___ tag123vector ___ Ein Vektor ist ein eindimensionales Array: Er enthält Komponenten, auf die mit einem ganzzahligen Index zugegriffen werden kann. In einigen Sprachen kann die Größe eines Vektors nach Bedarf vergrößert oder verkleinert werden, um Elemente hinzuzufügen und zu entfernen, nachdem der Vektor erstellt wurde. Verwenden Sie "Vektorgrafiken" für die grafische Darstellung. ___
Kevin Anderson 05.01.2018, 14:40
quelle
12

Die Verwirrung hier kommt von mehreren "Namenskollisionen" in C ++ und seiner Standardbibliothek.

  • C ++ hat eingebaute Objekte namens arrays . Die Variable v in Ihrem Programm hat den Typ "Array von zehn Ganzzahlen".
  • Andere Programmiersprachen beziehen sich auf Arrays als Vektoren , die Dozenten, die mit mehreren Programmiersprachen vertraut sind, dazu bringen, C ++ - Arrays "Vektoren" zu nennen. Dies ist, was Ihr Kursleiter getan hat, obwohl es nicht mit C ++ Nomenklatur von Typen übereinstimmt.
  • C ++ Standard Library definiert eine Vorlagenklasse namens std::vector . Dies nennt Ihr Buch "Vektoren", was korrekt ist.
  • Die C ++ Standardbibliothek definiert eine weitere Vorlagenklasse mit dem Namen std::array , um Arrays mit fester Größe darzustellen. Dies führt zu einer Verwechslung mit integrierten C ++ - Arrays.

Um Verwechslungen zu vermeiden, beziehen Sie sich auf int v[10] als "integriertes Array", std::array<int, 10> v auf "Array-Container" und std::vector<int> v auf "Vektor".

    
dasblinkenlight 05.01.2018 14:45
quelle
7

Weil das nicht wirklich, wirklich Vektoren sind.

In C ++, wenn Leute "Vektor" sagen, beziehen sie sich meistens auf einen STL-Container, std::vector . Es ist im Wesentlichen ein dynamisches Array, das bequem zu verwenden und leistungsstark ist.

Sie haben ein einfaches Array mit fester Länge geschrieben. Es hat sehr eingeschränkte Funktionalität. Wenn Sie ein Array haben, das für 10 Elemente definiert ist, können Sie es später nicht mehr ändern, sodass es 11 Elemente enthalten kann. Die Größe ist statisch.

Um den std::vector -Container zu verwenden, fügen Sie zuerst den entsprechenden Header hinzu:

%Vor%

Es ist eine Vorlagenklasse, daher müssen Sie beim Definieren einer Instanz einen Typ vorschlagen:

%Vor%

Sie können dann verschiedene Dinge tun, denn es ist eine Art dynamisches Array:

%Vor%

Beachten Sie, dass Sie die Größe eines Arrays nicht ändern können. Obwohl dynamische Zuweisung eine Alternative ist, würden Sie bald damit herumspielen.

Sie können auch einen Vektor direkt kopieren, ohne eine Schleife zu schreiben, wenn Sie mit Arrays arbeiten:

%Vor%

Vektoren können auch von Funktionen zurückgegeben werden, während Arrays nicht:

%Vor%

Diese Antwort ist nur eine vage Einleitung, die Ihnen helfen sollte, die Grundlagen zu beseitigen. Sie können auf den obigen Link für weitere Informationen verweisen.

    
iBug 05.01.2018 14:40
quelle

Tags und Links