Wenn ich mehrere Werte des gleichen Typs in C++ speichern muss, kann ich einen Vektor oder ein Array verwenden. Bisher habe ich hauptsächlich nur Vektoren verwendet, aber ich habe gehört, dass Arrays schneller arbeiten (Werte lesen und schreiben). Wenn das wahr ist, würde ich gerne wissen, wie ich ein Array mit der Größe machen könnte, die ich von der Standardeingabe gelesen habe. Ich zur Zeit so etwas wie folgt verwenden:C++ initialisiert ein Array mit der Größe von der Standardeingabe
int N;
cin >> N;
vector<int> myVector(N);
ich versucht habe:
int N;
cin >> N;
array<int, N> myArray;
aber das gibt mir einen Fehler, da:
Fehler: den Wert von ‚N‘ ist nicht verwendbar in einem konstanten Ausdruck
ich habe auch versucht:
int N;
cin >> N;
int myArray[N];
Diese kompilieren, aber wenn ich versuche, für die eine Größe von arra zu fragen y (myArray.size()
) darüber ein iterieren mit for-Schleife dann erhalte ich einen Fehler:
Fehler: Anforderung für Element 'size' in 'myArray', die besteht aus nicht-Klassentyp 'int [N]'
Also sollte ich Vektoren durch Arrays ersetzen, um meinen Code schneller zu machen und wenn ja, wie soll ich das machen?
*** sollte ich Ersetze Vektoren mit Arrays, um meinen Code schneller zu machen *** Nein, du brauchst ein dynamisches Array, also benutze einen Vektor. – drescherjm
'std :: array's Geschwindigkeitsvorteil (und seine Größenbeschränkung für stack-basierte Objekte) kommt von der Tatsache, dass' std :: array's Größe zur Kompilierzeit bekannt ist und somit eine Zuordnung vermieden werden kann , noch wichtiger, eine Indirektion. Es kann einen Platz für eine "std :: array" -ähnliche Datenstruktur geben, die eine bekannte obere Größe, aber eine dynamische Größe bis zu diesem oberen likit aufweist. In der Standard-C++ - Bibliothek gibt es jedoch keine solche Datenstruktur. –
'int myArray [N];' ist ein VLA. Dies ist kein legales C++, sondern eine Compiler-Erweiterung. Ich bezweifle, dass es sowieso schneller als Vektor ist und es macht Ihren Code nur auf Compiler, die diese nicht standardmäßige Erweiterung unterstützen. – drescherjm