将矢量用作堆栈的容器适配器时出错

Error using vector as container adaptor for stack

本文关键字:适配器 出错 堆栈      更新时间:2023-10-16

我无法在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),因为它是一个堆栈成员函数,但是.pushback作为一个向量成员函数,它不接受。错误为:

'class std::stack<int, std::vector<int> >' has no member named 'push_back'

push_back不是std::stack的成员,即使它是底层容器类型的成员。这就是它的定义。您必须使用push

如果你个人想要一个"向量堆栈",我会直接使用std::vector,但这只是我的意见。

Stack是容器适配器,即简单地说,该类型容器的接口作为模板参数传递给它。堆栈所做的只是从接口中消除容器上的非堆栈操作,并将其常规名称赋予back()、push_back()和pop_back(

此外,默认情况下,堆栈会制作一个deque来容纳其元素,但可以使用任何提供back()、push_back()和pop_back(()的序列。