ACM學習總結

2021-09-12 07:35:03 字數 2737 閱讀 5379

acm是乙個對我們計算機專業是乙個含金量很高的比賽,每乙個對程式設計有一定興趣的人來說一定不會放過這個很好的學習機會,雖然說,我錯過了寒假中的學習機會,但開學後,機會總還是有的。我們第乙個章節主要學習stl,就是標準模板庫,通過合理的運用stl我們一是可以節省大量的步驟,從而節省程式執行的時間,二是可以實現我們很多不便實現的功能得以實現。 

第乙個就是stack,即棧,這種資料結構就象是乙個死胡同,只能在棧頂進行資料的操作。

棧的標頭檔案#include,stacks,等

empty() -- 返回bool型,表示棧內是否為空 (s.empty() )

size() -- 返回棧內元素個數 (s.size() )

top() -- 返回棧頂元素值 (s.top() ),

pop() -- 移除棧頂元素(s.pop(); )

push(data_type a) -- 向棧壓入乙個元素 a(s.push(a); ),即壓棧;

第二個學習的就是佇列,與棧所不同的是,佇列是通路,但也只能是對隊首的資料取用,對隊尾的資料放入,佇列的型別因為跟棧的型別很相似,因此,用的方法就跟棧的型別一樣 標頭檔案#include;queueq;等

empty() -- 返回bool型,表示queue是否為空 (q.empty() )

size() -- 返回queue內元素個數 (q.size() )

front() -- 返回queue內的下乙個元素 (q.front() )

back() -- 返回queue內的最後乙個元素(q.back() )

pop() -- 移除queue中的乙個元素(q.pop(); )

push(data_type a) -- 將乙個元素a置入queue中(q.push(a); )

第三個學習的就是動態陣列vector,動態陣列與一維陣列類似,只不過區別就是動態陣列隨著取用會自動地增加陣列的上限,不過陣列的放置需要乙個個地將資料放進動態陣列中,防止陣列中有空的陣列。

標頭檔案#include,vectorv,

empty() -- 返回bool型,表示vector是否為空 (v.empty() )

size() -- 返回vector內元素個數 (v.size() )

push_back(data_type a) 將元素a插入最尾端

pop_back() 將最尾端元素刪除

v[i] 類似陣列取第i個位置的元素(v[0] )

第四個就是sort函式,能夠將輸進的資料按照一定的順序排列,一般sort預設的是從小到大排列,當然也可以通過更改返回值來改變它的排列方式。

標頭檔案#include ;sort(begin, end);

bool cmp(int a, int b)

就是更改的方式;

第五個就是生成排列

標頭檔案: #include bool next_permutation(begin, end);改變區間內元素的順序,產生下乙個排列。

bool prev_permutation(begin, end);產生前乙個排列。

end為最後乙個元素的下乙個位置。

第六個是upper_bound 和 lower_bound的運用,這兩個其實很簡單,前乙個是找不符合條件的第乙個位置,後乙個則是找符合的第乙個位置,重點是位置,而不是數值。

第七個就是set和multiset容器,兩個都能將資料按照一定的順序排序,只不過區別是set能夠將容器中的資料去重,而multiset不存在這項功能。

set容器的難點是過載小於號bool operator < (const new_type &a)const

了解會用即可。

s.insert(elem) -- 安插乙個elem副本,返回新元素位置,就是插入資料

s.erase(elem) -- 移除與elem元素相等的所有元素,返回被移除 的元素個數。

s.erase(pos) -- 移除迭代器pos所指位置上的元素,無返回值。

s.clear() -- 移除全部元素,將整個容器清空。

第八個是map和multimap容器,這個容器就是相當於數學中的對映,將乙個資料關聯到另乙個資料,map容器中兩個資料不能一樣,而multimap中的資料則可相同。

m.begin() 返回乙個雙向迭代器,指向第乙個元素。

m.end() 返回乙個雙向迭代器,指向最後乙個元素的下乙個 位置。

m.clear() 講整個容器清空。

m.erase(elem) 移除鍵值為elem的所有元素,返回個數,對 於map來說非0即1。

m.erase(pos) 移除迭代器pos所指位置上的元素。

m.size() 返回容器大小

m.empty() 返回容器是否為空

m.count(key) 返回鍵值等於key的元素的個數

m.lower_bound(key) 返回鍵值等於key的元素的第乙個可安插 的位置

m.upper_bound(key) 返回鍵值等於key的元素的最後乙個可安 插的位置

最後乙個則是優先佇列,與佇列不同的是優先佇列能將在佇列中的資料進行排序,用的是二叉樹的方式,保證最大的值永遠在第一位,但是,中間的數值則不能保證其單項的排列方式。

我現在對stl了解的還不夠充分,不能自由從容地運用stl,因此,使用的型別我還在摸索,但是經過這兩個星期的學習,我了解到了程式設計這個東西是真的有一定的難度,但是學習有難度的知識並會自如地運用正是我們學習的道理。在之後我會更加努力的學習,體驗程式設計的快感。

ACM學習總結

acm總結報告 與acm程式設計這門課的接觸是從大一上學期學校舉辦的面向大一新生的程式設計比賽,當時雖然什麼也不會,只會簡單的c 與c語言,當時學過的最複雜的程式就是氣泡排序了,現在回想起來還真是有趣,只是憑著一點興趣就去參加了這個比賽,現在想來,如果不是那點興趣我也不會接觸到這一門課,當時比寒結束...

ACM 學習總結

優先佇列 乙個擁有權值觀念的queue,自動依照元素的權值排列,權值最高排在前面。預設情況下,priority queue是利用乙個max heap完成的 優先佇列的排序不是線性的排序,而是根據規定的優先順序進行排序。內部排序是二叉樹排序。標頭檔案 include 定義 priority queue...

學習總結 近期acm學習的總結

開學已經乙個月了,對acm的學習也乙個月了,做了一下總結 對自己不好的地方的反省 1.開學一開始學的是stl,不得不說stl是乙個很好的東西,熟練的運用stl大大的減少了 量,也使演算法容易實現。但是我在用stl後使自己產生了一種惰性思維。在兩個星期的stl練習後,我發現自己變得越來越懶,不願意自己...