理解`std :: stack`的容器模板参数

时间:2014-08-15 17:09:15

标签: c++ stl stack

std::stack的第二个模板参数到底代表什么?例如,在以下代码中,std::vector<int>意味着什么?

std::stack<int, std::vector<int>> fourth(myvector);

2 个答案:

答案 0 :(得分:3)

std::vector<int>

指定std::stack<int>用于在内部存储值的容器。

std::stack的模板签名是

template<
    class T,
    class Container = std::deque<T>
> class stack;

请查看Container模板参数here上的说明。

您可以指定满足Sequence Container要求的容器类。如果省略模板参数规范,则默认容器类型为std::deque<T>


注意:

为了避免您身边的任何误解,关于std::stack<>围绕这些容器实例执行的包装

std::stack<int,std::vector<int> > fourth (myvector);

匹配explicit stack( const Container& cont );构造函数签名,

  

1)复制 - 构造具有c内容的基础容器cont。这也是默认构造函数(直到C ++ 11)

因此,在myvector构建后,fourthfourth个实例是独立的。操纵它们中的任何一个都不会影响另一个。 std::vector<int>使用的fourth实例在内部进行管理。

答案 1 :(得分:2)

查看std::stack的模板参数:

template< class T, class Container = std::deque<T>> class stack;

std::stack容器适配器,默认包装std::deque。此代码对其进行了更改,以便fourth包含std::vector