如何在 C++ 中制作堆栈列表?

How to make a list of stacks in C++?

我正在尝试使用下面的代码在 C++ 中创建堆栈列表,但出现错误

main.cpp:17:13: error: ‘__gnu_cxx::__alloc_traits > >::value_type {aka class std::stack}’ has no member named ‘push_back’
 vs[i-1].push_back(s);

代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
vector<stack<int>> vs;

for(int i=1; i<4; i++)
{
stack<int> s;
s.push(i*2);
s.push(i*3);
s.push(i*4);
vs[i-1].push_back(s);
}

return 0;
}

你不能使用这一行:-

vs[i-1].push_back(s);

或者早点定义列表的大小。 例如

vector<stack<int> > vs(100);

否则只写

vs.push_back(s);

更新解决方案

#include <iostream>
#include<stack>
#include<vector>
using namespace std;
 
int main()
{
    vector< stack<int> > vs;
 
for(int i=1; i<4; i++)
{
    stack<int> s;
    s.push(i*2);
    s.push(i*3);
    s.push(i*4);
    vs.push_back(s);
}
 
return 0;
}

首先,您的向量是空的,其中的任何索引都将越界并导致未定义的行为。

其次,vs[any_valid_index] 是一个 堆栈 而不是向量。

你可能想要的是

vs.push_back(s);

这不是仅堆栈向量的事实。其实就是vector的基本属性。您有两个选项可以将值添加到向量中。

  1. 如果你没有像

    那样声明向量的大小(你所做的)
     vector<stack<int>> vs;
     stack<int>s;
    

然后你可以使用vs.push_back(s)插入它会自动处理索引。

  1. 另一种方法是先声明向量的大小。喜欢

    vector<stack<int>> vs(sz); //size(sz) is defined by user
    stack<int>s;
    

然后就可以使用vs[index]= s插入了,这次需要手动处理索引