如果你有这样的堆栈,我对堆栈的工作方式感到困惑
stack<string,vector<int>>
我理解容器是vector类型的容器,里面是整数,那么string有什么用呢?或者即使它不是字符串,也可能是 bool 值。第一个参数有什么作用?
#include <iostream>
#include <stack>
#include <vector>
#include <string>
using namespace std;
int main ()
{
stack<string,vector<int> > third;
third.emplace(1);
cout << "size of third: " << third.size() << '\n';
}
最佳答案
你的...
stack<string,vector<int>>
...不是使用 std::stack
的正确方法模板。几乎总是你只需要一个模板参数,它是堆栈中元素的值类型,所以 stack<string>
会比较常见,并且stack<vector<int>>
完全有道理,但很少见。
第二个参数在那里,所以你可以指定一个替代容器,stack
API 应该是分层的,而不是您通常需要更改的默认值 std::deque<T>
, 其中T
是 stack
的第一个模板参数, 通常就可以了。
如果您确实需要指定第二个模板参数,通常是 some_container<T>
,而不是 string
的合法但具有误导性的不匹配对于 T
和 vector<int>
在你的问题中假设。令人困惑的是,第一个模板参数的实际类型为 stack
仅用于指定默认值 std::deque<T>
对于第二个参数 - 容器类型。堆栈的实际元素类型取自容器类型,因此当您显式指定容器类型时,第一个模板参数为 stack<>
只是一个占位符,在功能上被忽略了。这很不幸——我认为要求第一个参数与容器的 element_type 匹配的静态断言的标准将有助于防止误导代码。
容器类型也有限制 - 它需要支持某些功能并为 stack
提供某些类型/类型定义。将其用于实际数据存储。
关于c++ - 堆栈及其实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19828594/