使用vector作为堆栈的容器适配器时出错

时间:2014-11-05 15:50:49

标签: c++ stl stack containers

我无法在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'

2 个答案:

答案 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()的序列。