C++ 此语句的确切含义是什么<;int,list<;int>&燃气轮机;它与stack有何不同<;int>;?

C++ 此语句的确切含义是什么<;int,list<;int>&燃气轮机;它与stack有何不同<;int>;?,c++,c++11,C++,C++11,我不明白当我们声明堆栈时,列表做了什么。它不会改变我尝试的内容。如上所述,第二个模板参数定义了基础容器: Container—用于存储数据的基础容器的类型 元素。容器必须满足以下要求: 序列容器。此外,它必须提供以下内容 具有常用语义的函数: back() push_back() pop_back() 标准容器std::vector、std::deque和std::list满足 这些要求。默认情况下,如果没有为指定容器类 一个特定的堆栈类实例化,标准容器 使用std::deque 因此std

我不明白当我们声明堆栈时,
列表
做了什么。它不会改变我尝试的内容。

如上所述,第二个模板参数定义了基础容器:

Container—用于存储数据的基础容器的类型 元素。容器必须满足以下要求: 序列容器。此外,它必须提供以下内容 具有常用语义的函数:

back()
push_back()
pop_back() 
标准容器std::vector、std::deque和std::list满足 这些要求。默认情况下,如果没有为指定容器类 一个特定的堆栈类实例化,标准容器 使用std::deque

因此
std::stack
定义此堆栈使用
std::list
作为底层容器,而不是默认的
std::deque
不是容器,而是容器适配器。您可以告诉它要存储什么类型的元素以及要存储在什么容器中

大致如下:

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(); }
};
模板
类堆栈{
受保护的:
容器c;
公众:
空推(T常数&v){c.push_back(v)}
void pop(){c.pop_back();}
};

如您所见,当您从
stack
更改为
stack
时,您只是在更改底层容器存储。界面根本没有改变。但是性能肯定会-
deque
堆栈
列表
更好的选择

那是标准栈吗?如果是这样的话,首先阅读我使用名称空间std:PThanks实际使用的.Yes、std::stack和std::list,这有助于我找到答案。标准容器std::vector、std::deque和std::list满足这些要求。默认情况下,如果没有为特定堆栈类实例化指定容器类,则使用标准容器std::deque。