目录
栈的底层实现原理
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++欢迎分享,转载请注明来源:内存溢出
评论列表(0条)