我无法在STL上使用类堆栈的容器适配器来解决问题。 这是代码:
typedef stack <int, vector<int> > vector_stack;
...
int main()
{
vector_stack vec;
vec.push(10);
vec.push_back(20);
vec.push_back(30);
vec.pop();
cout << vec[0] << vec[1];
...
}
它按预期通过.push(10),因为它是一个堆栈成员函数, 但.push_back作为矢量成员函数,它不接受。错误是:
'class std::stack<int, std::vector<int> >' has no member named 'push_back'
答案 0 :(得分:2)
push_back
不是std::stack
的成员,即使它是基础容器类型的成员。这就是它定义的方式。您必须使用push
。
如果你想要一个&#34;矢量堆栈&#34;我个人会直接使用std::vector
,但这只是我的意见。
答案 1 :(得分:0)
Stack是容器适配器,即只是该类型容器的接口作为模板参数传递给它。所有堆栈的作用是从接口中消除其容器上的非堆栈操作,并将back(),push_back()和pop_back()赋予它们的常规名称top(),push()和pop()
此外,默认情况下,堆栈会使用双端队列来保存其元素,但可以使用任何提供back(),push_back()和pop_back()的序列。