该语句的确切含义是stack <int,list <int =“”>>,它与stack <int>有何不同?

时间:2019-04-21 17:13:37

标签: c++ c++11

当我们声明堆栈list<int>时,我不明白stack<int, list<int> >的作用。它并没有改变我的尝试。

2 个答案:

答案 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