为了账号安全,请及时绑定邮箱和手机立即绑定

请问一下在#include<stack>中有多少函数?有哪些用法?

请问一下在#include<stack>中有多少函数?有哪些用法?

人到中年有点甜 2022-01-21 19:15:19
stack<BTreeNode*> st;这句中st的类型是stack吧?跟中间的树定义有什么关系?中间那个<BTreeNode>是干什么的?
查看完整描述

2 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

具体函数声明及其实现可以用记事本或IDE打开stack文件查看代码。(VS2008中可以直接在#include上右击文件名选择打开文档。)
stack<T>是模板栈类型,其中栈的节点类型为T。
例如定义
struct BTreeNode
{
BTreeNode data;
BTreeNode *next;
};
那么stack<BTreeNode*>st;就定义了一个栈st,其中每个节点的类型为BTreeNode*。
看样子st是用来存放树的节点指针的一个栈,作为实现某些算法的数据结构。
----

查看完整回答
反对 回复 2022-01-23
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

1.栈是存放函数返回地址、参数、局部变量的。
堆是程序可以自由操作的内存,使用时先申请,用完之后释放,如何使用完全由程序代码控制。

2.栈在汇编代码中表示成PUSH POP,用的是ESS段,SP寄存器
而堆不是,是在内存中读写,EDS段,

3.
C++包括两种被应用程序管理的内存区域:一种称为栈(stack),另一种称为堆(heap)。
stack是函数被调用时自动分配的一块内存区域,它主要用于保留函数内使用的变量及函数调用位置处下一条代码的地址。
stack是后进先出,一个可变的指针指向stack的顶部。
本质上,当一个函数被程序调用时,当前的执行地址被放入stack,如果有参数传递到函数内,这些参数也被压入stack,如果函数内有变量,它们也被压入stack,如果函数执行时调用另一个函数,重复上面的过程。
当从函数返回时,stack指针指向存放先前执行地址的位置,也就是说,stack空间内分配的元素已被删除。这就是为什么函数内的变量此时无效,因为它们已经被推出了stack,另外要注意的是,声明一个静态变量,它没有进入stack中。
另一种由应用程序管理的内存区域是堆(heap),heap是储存应用程序的内存分配需求,并且分离于程序代码和stack,heap中分配的对象的总的空间受限于计算机系统中有效的虚拟内存。
C程序通常使用malloc和free分配和回收heap内存,在C++中,使用new和delete.

4.函数里的变量一般是stack,用new和malloc分配的是heap
stack是有大小限制的,heap的大小与系统虚拟内存差不多
stack运算比heap快
stack由编译器来管理,heap由程序员new, malloc, delete, free

5.heap____自由存储区
stack____局部存储区
通常意义上的堆栈一般指的就是栈



查看完整回答
反对 回复 2022-01-23
  • 2 回答
  • 0 关注
  • 228 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号