C++使用vector实现栈数据结构

4星 · 超过85%的资源 需积分: 35 13 下载量 109 浏览量 更新于2024-09-26 收藏 1KB TXT 举报
"这篇代码示例展示了如何使用C++中的`std::vector`来实现一个栈数据结构。" 在这段代码中,作者创建了一个名为`Stack`的类,该类利用`std::vector<int>`来存储元素,并通过成员函数实现了栈的基本操作。栈是一种后进先出(LIFO)的数据结构,常用于临时存储和检索数据。 1. **Stack类的定义**: 类`Stack`包含了两个私有成员变量: - `vector<int> a`:存储栈内元素的数组。 - `int top`:表示栈顶的索引,初始化为-1,表示栈空。 2. **构造函数**: `Stack(void)`构造函数初始化`top`为-1,表示栈尚未开始使用。 3. **Empty()函数**: `bool Empty()const`检查栈是否为空。如果`a.size()`(即`vector`的大小)为0,则返回`true`,表示栈为空;否则返回`false`。 4. **GetS()函数**: `int GetS()const`返回栈顶的元素,但不删除它。通过`a.at(top)`获取栈顶的值。 5. **PopS()函数**: `int PopS()`从栈中弹出顶部元素并返回其值。首先检查栈是否为空,如果为空则输出错误信息并返回`FAIL`。否则,使用迭代器找到最后一个元素(栈顶),记录其前一个位置的索引,将`top`减一,然后删除栈顶元素(通过`erase`函数)。最后返回弹出的元素值。 6. **InS(int data)函数**: `void InS(int data)`将`data`压入栈顶。`push_back(data)`将新元素添加到`vector`的末尾,并自动更新`top`的值。 7. **析构函数**: `~Stack(void)`是`Stack`类的默认析构函数,这里没有特别的清理工作,因为`vector`会自动处理内存释放。 8. **主函数示例**: 主函数`int_tmain`演示了如何使用`Stack`类。创建一个`Stack`对象`s`,然后连续将0到99的整数压入栈中,每次压入后暂停300毫秒,以便观察进程。最后等待1秒后再检查栈是否为空。 通过这个实现,我们可以看到`std::vector`作为底层数据结构,可以方便地提供动态扩展和收缩的能力,使得栈操作高效且易于理解。然而,与标准库提供的`std::stack`容器适配器相比,自定义的`Stack`类可能缺乏一些额外的功能和优化,如迭代器支持、容量管理等。在实际应用中,选择`std::stack`通常更简洁且符合STL标准。