stl中的部分簡單應i用包括棧(stack)、佇列(queue)、其中佇列還有特殊的優先佇列(priority_queue);還有vector-動態陣列、其次還有sort排序以及生成排序等多種排序方法,其中包括upper_bound和lower_bound的定址排序法方便返回特定元素的第乙個位置。其次還有set和multiset 與map和multimap等簡單應用問題。
首先介紹一下棧、佇列、以及優先佇列、動態陣列的共同點與不同點:
我們先來認識一下棧(stack):
棧是一種先進後出的資料結構,類似於只有出入口相同的乙個線性排列,但是一端封閉,只有入口處(即最頂端)可以進行移除等操作。
佇列queue類似於棧,但是它是一種先進先出的資料結構,即乙個入口,乙個出口,互不相通,入口只能輸入資料,不負責輸出,出口處與之類似,只負責輸出,即從底端加入元素,但從頂端輸出。
優先佇列與佇列更加接近,基本輸入輸出結構與佇列類似,但輸出元素順序有所限定,可以預設為優先佇列(priority_queue)擁有權值觀念,挑三揀四,它會自動依照元素的權值進行排列,權值最高的排在最前面,即權值高者優先輸出,也就是總是彈出鍵值最大元素,因此稱之為優先佇列。這裡的權值排序輸出實際上是利用了pop_heap(max_haep)演算法,因此可以將優先佇列內部看作乙個heap。
動態陣列(vector),聽名字就好似陣列,但出現在這裡,也有部分類似於線性資料結構的性質,即可以通過指定下標對相應元素進行單獨處理,也可以類似於線性排列對資料元素進行統計,增添,插入,刪除等操作。
初步說明他們之間的一些共性,即標頭檔案,定義方式,操作等方面都十分相似:
標頭檔案:
#include
都要在程式開始前對頭檔案進行相應處理。
定義:
stackstack_name;
queue queue_name;
priority_queue priority_queue_name;
vector vector_name;
定義出來類似於
stacks;等
更加類似的是操作:
例如在棧中,一系列操作如下:
empty();表示返回bool值,表示棧內是否為空;
size();表示返回棧內元素的個數;
top();表示返回棧頂元素值;
pop();表示移除棧頂元素;
push(date_type a);表示想站定壓入乙個元素;
當然程式執行時的情況要以下面為準:
資料結構名.操作名();
這樣才能區分操作,不至於導致亂碼;
我們可以來看下面的例子:
#include #include #include using namespace std;
int main()
else
return 0;
}
其輸出結果為:
top: 3
size: 3
size: 2
is not empty
這些操作在佇列中與之類似:
另外在佇列中還有:
front()表示 返回queue內的下乙個元素 (q.front() )
back()表示 返回queue內的最後乙個元素(q.back() )
這在佇列中比較特有,在優先佇列中也有所不同:
q.top()表示返回優先佇列的下乙個元素
在vector動態陣列中:
push_back(data_type a)表示將元素a插入最尾端
pop_back()表示將最尾端元素刪除
v[i]表示 類似陣列取第i個位置的元素(v[0] )
此時的輸入,刪除與棧、佇列略有不同。
另外關於排序問題:
sort:
標頭檔案: #include
sort(begin, end);
sort(begin, end, cmp);
分為兩種,第一種是系統預設從小到大對資料元素進行排序,第二種表示自定義排序方式,利用cmp函式進行自定義排序。
例:int num = ;
bool cmp(int a, int b)
即自定義函式型別為bool型,讀取a,b;返回a>b;
sort(num, num + 5, cmp);
進行如此排序後得到:
num = ;
生成排序:
標頭檔案: #include
bool next_permutation(begin, end);
改變區間內元素的順序,產生下乙個排列。
bool prev_permutation(begin, end);
產生前乙個排列。
end為最後乙個元素的下乙個位置。
upper_bound 和 lower_bound:
upper_bound(begin, end, value);
返回》value的元素的第乙個位置。
lower_bound(begin, end, value);
返回》=value的元素的第乙個位置。
此處的位置在陣列中可認為是陣列的下標位置(注意陣列下標為零時的情形)
例:num = ;
lower_bound(num, num + 6, 2)
得到:num + 1
upper_bound(num, num + 6, 2)
得到:num + 3
在這裡我們也可以得到陣列中指定元素元素相同的數量以及將其全部輸出的一種方法。
只需利用如下所示方法即可:
int *x,*y;
int s=1;
x = lower_bound(num, num + 6, 2);
y = upper_bound(num, num + 6, 2);
while(x!=y)
利用s進行計數,指標x,y進行輸出即可。
另外關於stl的部分應用,如set和multiset 與map和multimap等問題會在接下來的部落格中寫到。
部分STL簡單應用知識點
stl中的部分簡單應i用包括棧 stack 佇列 queue 其中佇列還有特殊的優先佇列 priority queue 還有vector 動態陣列 其次還有sort排序以及生成排序等多種排序方法,其中包括upper bound和lower bound的定址排序法方便返回特定元素的第乙個位置。其次還有...
STL的簡單應用 知識點
stl的簡單應用 知識點 1 include 萬能的標頭檔案,對c 大部分操作完全可以實現。c 中的輸入和輸出有兩種方式,include using namespace std intmain 學習了string的一些簡單的應用,s.size 返回的是s中的字元個數 還有賦值,連線,比較。getli...
C 部分知識點簡單整理
第二章 1.類是物件的抽象,物件則是類的例項。類是抽象的,不為其分配儲存空間,物件是具體的,要為其分配儲存空間。類與結構的異同。2.private 私有的 只能被本類的成員函式引用。類外的不能引用 友元類除外 預設值。public 公用的 既可以被本類的成員函式引用,也可被本類中的其他函式引用。pr...