C++ STL中使用STL stack类
STL stack 是一个模板类,要使用它,必须包含头文件。它是一个泛型类,允许在顶部插入
和删除元素,而不允许访问中间的元素。从这种角度看, std::stack 的行为很像一叠盘子。
在有些 STL 实现中, std::stack 的定义如下:
template <
class elementType,
class Container=deque<Type>
> class stack;
参数 elementType 是 stack 存储的对象类型。第二个模板参数 Container 是 stack 使用的默认底层容
器实现类。 stack 默认在内部使用 std::deque 来存储数据, 但可指定使用 vector 或 list 来存储数据。 因此,
实例化整型栈的代码类似于下面这样:
std::stack <int> numsInStack;
要创建存储类(如 Tuna)对象的栈,可使用下述代码:
std::stack <Tuna> tunasInStack;
要创建使用不同底层容器的栈,可使用如下代码:
std::stack <double, vector <double>> doublesStackedInVec;
程序清单 24.1 演示了各种实例化方式。
0: #include <stack>
1: #include <vector>
2:
3: int main ()
4: {
5: using namespace std;
6:
7: // A stack of integers
8: stack <int> numsInStack;
9:
10: // A stack of doubles
11: stack <double> dblsInStack;
12:
13: // A stack of doubles contained in a vector
14: stack <double, vector <double>> doublesStackedInVec;
15:
16: // initializing one stack to be a copy of another
17: stack <int> numsInStackCopy(numsInStack);
18:
19: return 0;
20: }
分析:
该示例没有输出, 但演示了如何实例化 STL 模板 stack。 第 8 行和第 11 行实例化了两个 stack 对象,
分别用于存储类型为 int 和 double 的元素。第 14 行也实例化了一个用于存储 double 元素的 stack,但
将第二个模板参数( stack 在内部使用的集合类)指定为 vector。如果没有指定第二个模板参数, stack
将自动使用默认的 std::deque。最后,第 17 行表明,可使用一个 stack 对象的拷贝来创建另一个 stack
对象。
对C++编程技术感兴趣的朋友请点击这里:零声学院C/C++服务器课程