堆栈及其实现
Stacks and their implementation
我对堆栈的工作方式感到困惑,如果你有一个像这样的堆栈
stack<string,vector<int>>
我知道容器是包含中间器的向量类型的容器,但是字符串的目的是什么?或者即使它不是字符串,也许它是一个布尔值。第一个参数的目的是什么?
#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>
的,而不是您的问题中假设的T
和vector<int>
string
合法但误导性的不匹配。 令人困惑的是,要stack
的第一个模板参数的实际类型仅用于指定第二个参数的默认值std::deque<T>
- 容器类型。 堆栈的实际元素类型取自容器类型,因此当您显式指定容器类型时,要stack<>
的第一个模板参数只是一个占位符,在功能上被忽略。 这是不幸的 - 我认为要求静态断言第一个参数与容器element_type匹配的标准将是防止误导性代码的有用保护。
容器类型也有限制 - 它需要支持某些功能并提供某些类型/类型定义,以便stack
将其用于实际数据存储。
stack<string,vector<int>>
没有意义,它是存储在整数向量中的一堆字符串。显然这是行不通的。
stack<int>
是存储在deque<int>
(默认值)中的整数堆栈。
stack<int,vector<int>>
是存储在整数向量中的一堆整数。
stack<int,MyCustomStorage>
是存储在自定义类中的一堆整数(显然您必须自己编写)。
编辑
看来在模板中stack<T,C>
T
仅用于为C
提供默认值,默认为deque<T>
。堆栈中元素的类型始终C::value_type
。
- 如何在 c++ 中实现堆栈数组?
- 使用链表实现堆栈时出错
- 在给定程序中降低矢量数组实现堆栈的时间复杂度有哪些不同的可能方法?
- C++ 使用数组实现堆栈
- 关于在C 中实现堆栈的问题
- 使用链接列表在C 中实现堆栈
- c++ 中 if 语句中的多个条件(通过链表实现堆栈)
- C 内存泄漏错误在实现堆栈类时
- 尝试实现堆栈时C++未定义的引用
- 链表与动态数组用于使用向量类实现堆栈
- 在C++中实现堆栈类
- 可视化 在C++中实现堆栈
- 使用链接列表实现堆栈,调试断言失败
- 我怎样才能实现堆栈的向量
- 在没有动态内存分配的情况下实现堆栈
- 如何使用 std::vector 实现堆栈
- 在c++中使用链表实现堆栈
- 在哪里实现堆栈类(在非递归二进制搜索函数中使用)
- 使用双链表实现堆栈的错误
- 在c++中使用链表实现堆栈,复制构造函数