为什么我的矢量下标超出范围?

时间:2016-12-07 02:59:26

标签: c++ vector stack

这是我的代码的一部分,也是它现在唯一活跃的部分,其余部分被注释掉了,我正在尝试创建一个堆栈向量,它将10个板堆叠起来,然后创建一个新堆栈。这是我第一次使用堆栈,所以我不知道我是否正确地声明了向量或其他..

但更重要的是,每当我尝试通过for循环将一个项目推送到堆栈时,我得到一个错误:向量下标超出范围行: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 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

当X为0时,或者每当X递增时,你需要将一个新的堆栈推入板[x]