stl stack

stl stack 

 

STL 中类 stack 实现了一个栈

1)push 能够插入元素

2)pop 移除栈顶元素

使用的时候,需要包含头文件 #include <stack>,stack 被声明如下:

namespace std
{
template <class T, class Container = deque<T> >
class stack;
}

第一个模板参数表示元素的类型,第二个模板参数表明了实现堆栈所使用的容器,即内部用于存储元素的容器,默认使用 deque,你可以使用任何的顺序容器,甚至于自己提供的顺序容器,只要含有 back(), push_back(), pop_back() 方法即可

定义一个栈:

std::stack<int> st;

std::stack<int, std::vector<int> > st2; // 使用 vector 做容器保存元素

这里提及一下 deque,对于 deque,元素被移除的时候,释放内存,而且在重新分配内存(realloc)的时候,不会拷贝元素,这是与 vector 不同的地方

1. 核心接口

栈少不了的三个核心接口:

1)void push() 插入元素到栈顶

2)void pop() 移除栈顶元素(注意,函数类型为 void)

3)value_type& top() 返回栈顶元素,并不会移除这个元素(注意,返回的是栈顶元素的引用),看下面的代码:

std::stack<int> st;
st.push(1);
st.top() = 2; // 可以方便的修改栈顶元素
std::cout << st.top() << "\n"; // 输出 2

注意在 STL 中,在栈为空时,top 和 pop 是未定义的,对于检查栈的大小,可以使用 empty 函数或者 size 函数

empty --- 如果栈为空,返回 true,否则返回 false

size --- 栈的大小

对于栈来说,几乎(不是全部)就是上面介绍的几个函数了

2. 类型

1)std::stack::value_type 元素的类型,等同于实现栈的顺序容器的类型,例如默认情况下,std::stack::value_type 等同于 std::deque::value_type

2)std::stack::size_type 无符号的整数类型,用于定义 stack 的大小

3)std::stack::container_type 容器类型

3. 函数补充

构造函数:

explicit stack::stack(const Container& cont);

比较操作符:

包括 ==, <=, >=, !=, <, >

两个栈相等的含义是,栈中元素数目,以及对应位置的元素相等

c++Stack(堆栈)是一个容器类的改编,为程序员提供了堆栈的全部功能,

————也就是说实现了一个先进后出的数据结构(FILO);

需包含<stack>头文件;

主要有一下几个函数:

empty
语法:   bool empty();

如当前堆栈为空,empty() 函数 返回 true 否则返回false.

pop
语法:   void pop();

pop() 函数移除堆栈中最顶层元素。

size
语法:   size_type size();

size() 函数返当前堆栈中的元素数目。

top
语法:    TYPE &top();

top() 函数返回对栈顶元素的引用.

可以通过它访问stack中的每个元素:

i = s.size();
while(i--)
    printf("%lf\n",*(&s.top()-i));


一个简单的例子:

#include <iostream>
#include <Stack>
using namespace std;

void main()
{
    stack<double> s;//可以是各种数据类型;
    for( int i=0; i < 10; i++ )
      s.push(i);
while(!s.empty())
{
printf("%lf\n",s.top());
s.pop();
}
    cout << "This stack has a size of " << s.size() << endl;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值