1、棧定義
標頭檔案#include
先進後出
#include
stack<
int> s;
2、c++ 中stack的定義struct中有size和top,之所以用size,而不用top+1表示size,是因為stack為空時,top為0,此時初始化,返回0個stack。
2、佇列
#include
// 佇列
先進先出
棧和佇列均為stl中定義。
講解:3、堆
#include
priority_queue<
int, vector<
int>
, greater<
int>>
//小頂堆隊頭小,越來越大。
priority_queue<
int, vector<
int>
, less<
int>>
//大頂堆隊頭大,越來越小;
4、陣列排序
#include
int a[3]
=;sort
(a,a+3)
;//預設公升序2,3,6
將序bool
compare
(int a,
int b)
int a[10]
=;sort
(a,a+
10,compare)
;//在這裡就不需要對compare函式傳入引數了,sort也可以用於vector排序,方法相同
for(
int i=
0;i<
10;i++
)cout<
<
sort
(arr1.
begin()
+tmp,arr1.
end())
;//在一定範圍內排序
sort()對陣列和vector排序後,會改變陣列和vector的順序。
5、cin讀入陣列
使用vector
int n =0;
cin >> n;
vector<
int>
p(n)
;for
(int i =
0; i < n; i++
)for
(int i =
0;i < p.
size()
;i++
) cout << endl;
vector<
int>nums;
int num =0;
dowhile
(getchar()
!='\n');
for(
int i =
0;i < nums.
size()
;i++
) cout << endl;
用陣列
#include
// #include
using
namespace std;
intmain
(int argc,
char
* ar**)
;int n=0;
cin>>n;
//讀入帶輸入數字個數
int*a =
newint
[n];
//不知道陣列大小,所以採用動態陣列
如果用靜態陣列,宣告靜態陣列需要宣告陣列大小.一般不用動態陣列,因為動態陣列申請記憶體時,不知道要申請多少。
int
*a =
newint()
;//定義動態陣列
int n=9;
//用變數定義陣列
int a[n]
;
6、集合插入、讀取
set<
int> s;
//定義集合
s.insert
(nums1[i]);
//傳入值
set<
int>
::iterator it;
//迭代取值
for(it=s.
begin()
;it!=s.
end(
);it++
)
集合中的值如果有重複,會自動去重。 棧,佇列,堆的區別
堆,棧,佇列的區別 從記憶體分配上來說 棧是作業系統在建立某個程序或者執行緒時建立的乙個儲存區域,是執行緒私有的,棧中存的是區域性變數之類,函式引數。由作業系統自動分配。堆是程式執行時,向作業系統申請某大小的記憶體空間,所有new 出來的物件和陣列都是儲存在堆中的。從資料結構來說 堆是完全二叉樹 棧...
堆與棧 佇列
首先,我們舉乙個例子 void f 這條短短的一句話就包含了堆與棧,看到new,我們首先就應該想到,我們分配了一塊堆記憶體,那麼指標p呢?他分配的是一塊棧記憶體,所以這句話的意思就是 在棧記憶體中存放了乙個指向一塊堆記憶體的指標p。在程式會先確定在堆中分配記憶體的大小,然後呼叫operator ne...
己 棧,堆,佇列
5.陣列中元素與下乙個比它大的元素之間的距離 6.迴圈陣列中比當前元素大的下乙個元素 部分借鑑 224.基本計算器 方法1 將中綴表示式轉換成字尾表示式,然後使用上面的方法 方法2 直接使用兩個棧進行求解,乙個放數字乙個放表示式 方法3.使用乙個棧求解 很巧妙,使用乙個棧,對於操作符,左右括號和數字...