STL之容器stack

STL之容器stack,第1张

目录

栈的底层实现原理

1. stack定义和初始化

2.stack的赋值

3. stack进栈和出栈

4. stack判空和大小

5. 注意事项(附加)

欢迎关注微信公众号 “三贝勒文子” ,每天学习C++


      

        学过数据结构的小伙伴都知道栈(stack),它是一种存放数据的结构体,以往我们在学习编程的时候都会自己去实现一个栈,今天,小编告诉你C++的STL给我们提供了stack容器,这个容器就是栈。

        栈的特性就是先进后出,而且只有一个开口,只能在一端进行数据的插入和删除 *** 作。如下图所示:

栈的底层实现原理

    在STL中,栈的底层实现原理默认是双端队列deque,但是你也可以通过vector或者list去实现stack。

    如果你要使用stack容器,那么需要添加头文件

# include

1. stack定义和初始化
  • 默认构造函数:

  • 拷贝构造函数:

// stack stkT;//stack采用模板类实现, stack对象的默认构造形式:
// stack(const stack &stk);//拷贝构造函数
​
stack serven_stk1;          // 空栈,默认构造函数
stack serven_stk2(serven_stk1);  // 拷贝构造函数
2.stack的赋值

operator=:重写operator= *** 作符。

// stack& operator=(const stack &stk);//重载等号 *** 作符
​
/* stack的赋值 *** 作 */
serven_stk1.push(1);
serven_stk1.push(2);
​
serven_stk2 = serven_stk1;        // 将栈serven_stk1拷贝给栈serven_stk2
​
cout<<"栈serven_stk1的出栈顺序为:";
Print_Stack(serven_stk1);
​
​
cout<<"栈serven_stk2的出栈顺序为:";
Print_Stack(serven_stk2);
cout<

运行结果:

3. stack进栈和出栈
  • push(val):元素入栈

  • pop():元素出栈

  • top():获取栈顶元素

// push(elem);//向栈顶添加元素
// pop();//从栈顶移除第一个元素
// top();//返回栈顶元素
​
​
/* stack的进栈和出栈 *** 作 */
serven_stk1.push(5);    // 进栈
serven_stk1.push(4);    // 进栈
serven_stk1.push(3);    // 进栈
cout<<"出栈前serven_stk1的长度:"<

运行结果:

4. stack判空和大小

empty():

size():

// empty();//判断堆栈是否为空
// size();//返回堆栈的大小
​
/* stack判空 */
cout<<"栈serven_stk1是否为空栈:"<

运行结果:

5. 注意事项(附加)

    在上面的打印栈元素的函数Print_stack中,参数的传递有三种,值传递、引用传递和指针传递,在这里就想告诉你只有值传递打印栈,执行pop()后,实参的栈里面的元素都还在。引用传递和指针传递在函数里面执行pop()后实参的栈的元素就都不见了。

/*  参数传递*/
cout<<"栈serven_stk2的出栈顺序为:";
Print_Stack(serven_stk2);
cout<<"栈serven_stk2的长度:"< ser){
  while(!ser.empty()){
    cout<& ser){
  while(!ser.empty()){
    cout<

运行结果:

    可以看到引用传递的结果就是,栈的大小变成0了,而值传递就还是2。 这个跟本章节的栈没多大关系,只是小编在这里告诉你一下,值传递和引用传递的区别和效果。

    既然说到这里了,就再说一下吧。在我们调用函数的时候,编译器会给函数里面的形参申请内存空间,然后将实参的数据拷贝一份放置到形参的内存空间中。

值传递:

引用传递:

这两张图很明显了吧~~

欢迎关注微信公众号 “三贝勒文子” ,每天学习C++

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/722806.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)