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?
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?
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.
Die Verwirrung hier kommt von mehreren "Namenskollisionen" in C ++ und seiner Standardbibliothek.
Um Verwechslungen zu vermeiden, beziehen Sie sich auf %code% als "integriertes Array", %code% auf "Array-Container" und %code% auf "Vektor".
Die Verwirrung hier kommt von mehreren "Namenskollisionen" in C ++ und seiner Standardbibliothek.
v
in Ihrem Programm hat den Typ "Array von zehn Ganzzahlen". std::vector
. Dies nennt Ihr Buch "Vektoren", was korrekt ist. 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".
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:
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.