亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問在#include<stack>中有多少函數?有哪些用法?

請問在#include<stack>中有多少函數?有哪些用法?

慕田峪7331174 2021-12-16 15:11:48
stack<BTreeNode*> st;這句中st的類型是stack吧?跟中間的樹定義有什么關系?中間那個<BTreeNode>是干什么的?
查看完整描述

2 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

具體函數聲明及其實現可以用記事本或IDE打開stack文件查看代碼。(VS2008中可以直接在#include上右擊文件名選擇打開文檔。)
stack<T>是模板棧類型,其中棧的節點類型為T。
例如定義
struct BTreeNode
{
BTreeNode data;
BTreeNode *next;
};
那么stack<BTreeNode*>st;就定義了一個棧st,其中每個節點的類型為BTreeNode*。
看樣子st是用來存放樹的節點指針的一個棧,作為實現某些算法的數據結構。

查看完整回答
反對 回復 2021-12-19
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

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____局部存儲區
通常意義上的堆棧一般指的就是棧



查看完整回答
反對 回復 2021-12-19
  • 2 回答
  • 0 關注
  • 378 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號