2016-12-07 113 views
-1

這是我的代碼的一部分,現在它的唯一活動部分,因爲剩下的部分被註釋掉了,我試圖創建一個堆棧向量,堆疊高10的板,然後創建一個新的堆棧。這是我第一次使用stacks,所以我不知道我是否正確地聲明瞭矢量或任何..爲什麼我得到矢量下標超出範圍?

但更重要的是,每當我嘗試通過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

你的載體是空的。在你使用'plates [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

謝謝。對不起,如果我的問題太含糊,但這正是我需要知道的。現在想弄清楚如何在向量中打印堆棧內容...再次感謝 – alwaysLearning

+0

@alwaysLearning - 您將需要2個嵌套循環。 1來遍歷vector和另一個來從每個堆棧中獲取單個值。您可以使用stack :: empty()函數作爲限制。請記住,獲取最高值只能讀取它。您仍然需要關閉該值才能閱讀下一個。 – tinstaafl

+0

我覺得這一切。太感謝了 – alwaysLearning

0

當X爲0,或當X的增加,你需要推動一個新的堆棧成板材[X]