2016-12-07 2 views
-1

Dies ist ein Segment meines Codes und der einzige aktive Teil davon, da der Rest auskommentiert ist, und ich versuche einen Vektor von Stapeln zu erstellen, der Platten 10 hoch stapelt und dann einen neuen Stapel erstellt. Es ist mein erstes Mal mit Stacks wirklich arbeiten, also weiß ich nicht, ob ich den Vektor richtig oder was auch immer ..Warum bekomme ich den Vektor-Index außerhalb des Bereichs?

Aber noch wichtiger, wenn ich versuche, ein Element auf den Stapel über die for-Schleife zu schieben, bekomme ich einen Fehler: Vektor Subscript außerhalb des Bereichs Linie: 1234 und ich bin mir nicht sicher, wie ich auf den Stapel drücken sollte oder ob es eine Möglichkeit gibt, trains.push_back() zu verwenden. (Jedes Mal, wenn ich push_back versuche, erhalte ich einen Fehler).

#include <stack> 
#include <iostream> 
using namespace std; 


int main() 
{ 
vector<stack<int>> plates; 
int numPlates,plateColor; 
int x = 0; 

cout << "Enter number of Plates" << endl; 
cin >> numPlates; 

for (int i = 0; i < numPlates; i++) { 
    if ((x + 1) % 10 == 0) // once plates are stacked ten high, start new stack 
     x++; 
    cin >> plateColor; 
    plates[x].push(plateColor); 
} 
+2

Sie zeigen nicht, wo „Züge“ definiert ist . Bitte poste ein [mcve]. – OldProgrammer

+0

sollte es Platten sein .. Ich habe es behoben – alwaysLearning

+0

Ihr Vektor ist leer. Sie müssen einige Elemente einfügen, bevor Sie 'plates [x]' verwenden können. – Galik

Antwort

1

Sie müssen den Stapel erstellen, füllen Sie es, dann verwenden emplace_back es dem Vektor hinzuzufügen. So etwas sollte funktionieren:

for (int i = 0; i < numPlates; i += 10) 
{ 
    stack<int> temp = stack<int>(); 
    for (int j = 0; j < 10 && j + i < numPlates; j++); 
    { 
     int plateColor = 0; 
     cin >> plateColor; 
     temp.push(plateColor); 
    } 
    plates.emplace_back(temp); 
} 
+0

Vielen Dank. Entschuldigung, wenn meine Frage zu vage war, aber genau das musste ich wissen. Jetzt, um herauszufinden, wie man Stapelinhalte innerhalb des Vektors ausdruckt ... Danke nochmal – alwaysLearning

+0

@alwaysLearning - Sie werden 2 verschachtelte Schleifen benötigen. 1 durchläuft den Vektor und ein anderer, um die einzelnen Werte von jedem Stapel zu erhalten. Sie können die Funktion stack :: empty() als Grenzwert verwenden. Denken Sie daran, dass der oberste Wert nur gelesen wird. Sie müssen den Wert weiterhin deaktivieren, um den nächsten Wert lesen zu können. – tinstaafl

+0

ich dachte alles aus. tausend Dank – alwaysLearning

0

Wenn X 0, oder wenn X in erhöht, müssen Sie einen neuen Stapel in Platten schieben [x]

Verwandte Themen