2017-09-26 6 views
-3

Warum gibt der Vektor 'r' die Ausgabe wie folgt? Stattdessen sollte es keine Null in der Liste haben.C++, Vektor: falsche Ausgabe mit 0 erhalten

Kann jemand helfen?

Ausgabe: 0 0 0 0 0 5 1 2 3 4

vector <int> leftRotation(vector <int> a, int d) { 
vector<int> r(a.size()); 

// int j=0; 
for(int i=d; i<a.size(); i++) 
    r.push_back(a[i]); 

for(int i=0; i<d; i++) 
    r.push_back(a[i]); 

return r; 
} 
+0

Das Kernproblem ist, dass Sie C++ basierend auf Raten schreiben. Das funktioniert nicht. Lernen Sie C++ systematisch aus einem guten Buch und suchen Sie nach Bedarf in cppreference.com. –

+0

Es existiert bereits ein std :: rotate. –

Antwort

2

Sie initialisieren r mit a.size() Kopien von 0 zu Beginn des Codes:

vector<int> r(a.size()); 

An diesem Punkt wird der Vektor r enthält Werte 0 0 0 0 0 (so viele Nullen wie es Elemente in a gibt).

Dann drücken Sie Werte auf die Rückseite dieses Vektors von Nullen. Bei jedem Schritt Ihrer Schleife:

0 0 0 0 0 5 
0 0 0 0 0 5 1 
0 0 0 0 0 5 1 2 
0 0 0 0 0 5 1 2 3 
0 0 0 0 0 5 1 2 3 4 
Statt

initialisieren mit einem leeren Vektor:

vector<int> r; 
1

Die lokale Variable von vector<int> r(a.size()) verwendet einen Konstruktor Überlastung des Vektors, die (size_type count) Argument und initialisiert (oder eher auf Null gestellten akzeptiert out) zu enthalten a.size() Nummer von 0 s. Zur Klärung bitte die std::vector Konstruktor Überlast Nr. 3:

Die Überlast (3) auf Null setzt Elemente der Nicht-Klasse-Typen aus, wie beispielsweise int

Verwenden eines Standard-Konstruktor einen leeren Behälter zu schaffen statt:

std::vector<int> r; 

oder:

std::vector<int> r{}; 
0
vector<int> r(a.size()); 

Mit dieser Zeile erstellen Sie einen Vektor der ursprünglichen Größe a.size(); die ersten Elemente in den Vektor auf 0 gesetzt

Wahrscheinlich Ihre a Vektor hat eine Größe 5, so ist dies, wo die fünf Nullen in der Ausgabe kommen:

0 0 0 0 0 

Dann Sie die push_back() Methode aufrufen auf r, und dies hängt andere Elemente am Ende des Vektors r an.

Um eine bessere Hilfe zu erhalten, erklären Sie bitte Ihr Ziel.