当我们声明堆栈list<int>
时,我不明白stack<int, list<int> >
的作用。它并没有改变我的尝试。
答案 0 :(得分:6)
stack
不是容器,而是容器适配器。您告诉它要存储什么类型的元素以及要存储在哪个容器中。
大致如下:
template <typename T, typename Container = std::deque<T>>
class stack {
protected:
Container c;
public:
void push(T const& v) { c.push_back(v); }
void pop() { c.pop_back(); }
};
如您所见,当您从stack<int>
更改为stack<int, list<int>>
时,您只是在更改基础容器存储。界面完全不变。但是性能肯定会-deque
对于stack
来说是一个{em>比list
更好的选择...
答案 1 :(得分:0)
如https://en.cppreference.com/w/cpp/container/stack所述,第二个模板参数定义了基础容器:
容器-用于存储以下内容的基础容器的类型 元素。容器必须满足以下要求 SequenceContainer。此外,它必须提供以下内容 具有通常语义的功能:
back() push_back() pop_back()
标准容器std :: vector,std :: deque和std :: list满足 这些要求。默认情况下,如果未为 特定的堆栈类实例化,标准容器 std :: deque被使用。
因此std::stack<int, std::list<int> >
定义了该堆栈以使用std::list
作为基础容器,而不是默认的std::deque