如何在 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的基本属性。您有两个选项可以将值添加到向量中。
如果你没有像
那样声明向量的大小(你所做的)
vector<stack<int>> vs;
stack<int>s;
然后你可以使用vs.push_back(s)
插入它会自动处理索引。
另一种方法是先声明向量的大小。喜欢
vector<stack<int>> vs(sz); //size(sz) is defined by user
stack<int>s;
然后就可以使用vs[index]= s
插入了,这次需要手动处理索引
我正在尝试使用下面的代码在 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的基本属性。您有两个选项可以将值添加到向量中。
如果你没有像
那样声明向量的大小(你所做的)vector<stack<int>> vs; stack<int>s;
然后你可以使用vs.push_back(s)
插入它会自动处理索引。
另一种方法是先声明向量的大小。喜欢
vector<stack<int>> vs(sz); //size(sz) is defined by user stack<int>s;
然后就可以使用vs[index]= s
插入了,这次需要手动处理索引