2016-12-07 4 views
-1

Это сегмент моего кода и единственная его активная часть прямо сейчас, когда остальная часть закомментирована, и я пытаюсь создать вектор стеков, который складывает плиты 10, а затем создает новый стек. Это мой первый опыт работы со стеками, поэтому я не знаю, правильно ли я объявил вектор или нет.Почему я получаю векторный индекс вне диапазона?

Но самое главное, когда я пытаюсь подтолкнуть элемент в стек через цикл for, я получаю сообщение об ошибке: vector индексом вне диапазона: 1234, и я не уверен, как я должен нажимать на стек или если есть способ использовать trains.push_back(). (Каждый раз, когда я пытаюсь push_back, я получаю сообщение об ошибке).

#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

Вы не показываете где «поезд» определяются , Пожалуйста, опубликуйте [mcve]. – OldProgrammer

+0

его должны быть тарелки .. я исправил его – alwaysLearning

+0

Ваш вектор пуст. Вы должны поставить некоторые элементы там, прежде чем вы сможете использовать 'plate [x]'. – Galik

ответ

1

Вам необходимо создать стек, заполнить его, а затем использовать emplace_back, чтобы добавить его в вектор. Нечто подобное должно работать:

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

Thankyou. Извините, если мой вопрос был слишком расплывчатым, но это именно то, что мне нужно было знать. Теперь, чтобы выяснить, как распечатать содержимое стека в векторе ... Еще раз спасибо – alwaysLearning

+0

@alwaysLearning - вам понадобятся 2 вложенных цикла. 1 для итерации по вектору, а другой - для получения отдельных значений из каждого стека. Вы можете использовать функцию stack :: empty() как предел. Помните, что получение верхнего значения читает только это. Вам все равно нужно вывести значение, чтобы читать следующий. – tinstaafl

+0

Я все понял. бесконечно благодарен – alwaysLearning

0

Когда Х 0, или всякий раз, когда X в увеличиваются, вам нужно нажать на новый стек в пластины [х]

Смежные вопросы