stl
1、string類
string是字元陣列的公升級。標頭檔案#include< string>,不需要定義陣列長度並且還可以使用類似數字運算的方式來對字串的複製,末尾新增等。
常用操作:
s1=s2+s3; //將s2和s3賦給s1
s1.size() //求字串的長度
s1.empty() //判斷是否為空,返回布林值,空(true),不空(false)
getline()//讀取一行,見換行符』\n』停止
s12.棧stack
棧一種特殊的陣列,後進先出。定義:stack《型別》變數名。無法使用取下標操作。類似於乙個豎井。
常用操作:
s.size() //求棧長
s.empty() //判斷是否為空,返回布林值,空(true),不空(false)
s.push() //壓棧
s.pop() //出棧
s.top() //返回棧頂元素(棧下標最大的元素)
3、佇列queue
佇列類似於棧,只不過是先進先出,定義:queue《型別》變數名,無法使用取下標操作。類似於人們排隊,先到先得。
常用操作:
q.size() //求佇列長
q.empty() //判斷是否為空,返回布林值,空(true),不空(false)
q.push() //入隊
q.pop() //出隊
q.front() //返回隊頭元素(佇列下標最小的元素)
q.back() //返回隊頭元素(佇列下標最大的元素)
4、優先佇列priority_queue
優先佇列是擁有權值的佇列,自動按照元素的權值排列,權值最大的元素在隊頭。但在優先佇列中並不是完全的降序排列,它只保證隊頭的元素是最大的,每執行出隊後,優先佇列將重新排列。可以用於對一組元素降序輸出。標頭檔案:#include,定義:priority_queue《型別》變數名,常用操作與queue相同。
5、向量vector
vector是動態陣列,當分配的元素大於儲存空間時,vector會加倍其儲存空間,不需要人為的分配空間。即若vector大小為50,當新增第51個元素時,預留空間不夠用了,vector會重新分配大小為100的儲存空間。標頭檔案#include< vector>,定義:vector《型別》變數名。
常用操作:
v.size() //求數組長
v.empty() //判斷是否為空,返回布林值,空(true),不空(false)
v.push_back() //在陣列最後插入元素
v.pop_back() //刪除陣列最後元素
v.begin() //第乙個元素的下標
v.end() //第乙個無效元素的下標(最後乙個有效元素的下標+1)(begin和end常用於排序)
v //同陣列去下標操作
6、排序sort
標頭檔案#include< algorithm>
用法:sort(begin,end,cmp); //begin是第乙個開始排序的下標位置,end是結束排序的下標+1,cmp是排序原則,若不寫則為預設公升序排列。對於自定義的結構體排序必須寫排序方式(cmp)
cmp:
boll cmp
(int a,
int b)
7、去重unique
該函式將重複的元素移至容器的末尾,返回的為前面的無重複項的尾位址,是一種偽去重。對陣列去除處理,必須保證相同的元素都在一起才能實現去重,一般和sort一起使用達到去重的目的。
用法:t=unique(begin,end)-begin; ///begin是開始去重的下標位置,end是結束去重的下標+1,-begin得到無重複的元素的個數。可自定義去重規則。
8、生成排序
改變區間內元素的順序,產生下乙個排列。標頭檔案: #include < algorithm> 。
用法:bool next_permutation(begin, end);begin是選則排序的第乙個元素的位置,end為最後乙個元素的下乙個位置。
bool prev_permutation(begin, end); //產生前乙個排列
9、upper_bound 和 lower_bound
查詢陣列相同元素在陣列的位置,兩者組合可以得到該元素的個數。upper_bound返回元素的第乙個位置。 lower_bound返回元素的最後乙個位置的下乙個位置。必須先用sort排序後在進行upper_bound 和 lower_bound的操作。
用法:upper_bound(begin, end, value); //返回value元素的第乙個位置
lower_bound(begin, end, value); //返回value的元素的最後乙個位置的下乙個位置
10、set 和 multiset
set為集合,不允許出現相同的元素,multiset為多重集合,允許出現相同的元素。且set和multiset都會根據特定的排序準則,自動將元素排序,預設公升序排列。
標頭檔案:#include< set>,定義:set《型別》變數名。
常用操作:
s.size() //求集合長
s.empty() //判斷是否為空,返回布林值,空(true),不空(false)
s.insert(elem) //插入元素
s.erase(elem) //移除與elem元素相等的所有元素,返回被移除的元素個數
s.erase(pos) //移除迭代器pos所指位置上的元素,無返回值
s.clear() //移除全部元素,將整個容器清空(不太常用)
11、map和multimap
map和multimap索引,其所有元素都會根據元素的鍵值自動排序,類似於set 和 multiset,map不允許出兩個元素有相同的鍵值而,multimap允許出現。map類似於陣列,第乙個元素為下標(map的下標可以為字串),第二個元素為儲存的值。map的所有元素都是pair,pair的第乙個元素被視為鍵值,第二個元素為實值。
常用操作:
m.size() //求集合長
m.empty() //判斷是否為空,返回布林值,空(true),不空(false)
m.count(key) //返回鍵值等於key的元素的個數
m.lower_bound(key) //返回鍵值等於key的元素的第乙個可安插的位置
m.upper_bound(key) 返回鍵值等於key的元素的最後乙個可安插的位置
m.begin() 返回乙個雙向迭代器,指向第乙個元素。
m.end() 返回乙個雙向迭代器,指向最後乙個元素的下乙個位置。
m.clear() 講整個容器清空。
m.erase(elem) 移除鍵值為elem的所有元素,返回個數,對於map來說非0即1。
m.erase(pos) 移除迭代器pos所指位置上的元素。 直接元素訪問: m[key] = value;查詢的時候如果沒有鍵值為key的元素,則安插乙個鍵值為key的新元素,實值為預設(一般0)。
m.insert(elem) 插入乙個元素elem
a)運用value_type插入 mapm; m.insert(map:: value_type (「robin」, 22.3));
b) 運用pair<> m.insert(pair(「robin」, 22.3));
c) 運用make_pair() m.insert(make_pair(「robin」, 22.3));
1、stl中的區間是[ ),即下限有效,上線無效。可以直接用上限減下限直接的所求個數。
2、萬能標頭檔案:#include
3、std::ios::sync_with_stdio(false); 可以加快cin,cout的速度使其效率基本與scanf和printf一致,但是cin時遇到「 」就會結束。對打比賽很有好處。
4、老師給我們看了acm隊員打比賽時的**,讓我收穫很大。acm比賽要爭分奪秒對時間要求非常嚴格,可以使用巨集定義的形式簡潔**,但是不易閱讀。
#define rep(i,a,n) for (int i=a;i<=n;i++)
//i為迴圈變數,a為初始值,n為界限值,遞增
#define per(i,a,n) for (int i=a;i>=n;i--)
//i為迴圈變數,a為初始值,n為界限值,遞減。
5、acm比賽中每一道題都最好一遍ac,所以要考慮到所有的情況,而題目給的樣例通過並不代表著程式一定ac,可以用隨機數來給程式檢驗。
srand
(time(0
))//rand是偽隨機數,利用系統時間來更改隨機數的起始位置來使隨機數變得真隨機
rand()
%n //從0~n-1範圍內的隨機數
並且在**中加入下行**用文字代替鍵盤輸入。
freopen
("in.txt"
,"r"
,stdin);
//提交的時候要注釋掉
6、學習了兩周的acm程式設計課程,我感覺到了壓力,但也學會了很多在c++課程中沒有學到的新的知識。string可以替代字元陣列而且更加方便。使用sort排序比氣泡排序更快速。可以用優先佇列來降序排列。總體來說這兩周的學習收穫頗豐。 2021 3 13 每週學習報告 1
每週學習總結 1 本週學習了 stl,stl全稱standard template library,標準模板庫。我們首先學習了string函式,在大一上學期我們學習了一些簡單的string函式,例如strcpy,strcpy,strcmp,的函式形式。這週還學習到乙個萬能開頭 include,使用這...
2021 3 13第一周總結積累 STL
本週在課堂上學習了兩大部分內容,分別為stl和貪心演算法。這兩部分尤其是stl在寫 中常用,有效的簡化了 因為自身的 能力並不突出,並且這部分知識較雜較多,決定本次在總結部分加入對知識的重新整理。在課下多加練習,按時保質量完成作業,不為作業而做作業,學到真正的知識,並且堅持堅持再堅持下去。此外,本週...
學習總結1
1 執行測試 提交缺陷,回歸驗證 2 其他評估 效能測試評估,自動化測試覆蓋 3 測試總結 測試報告,驗收總結,風險評估 4 時間管理 工具調研,框架 平台 工具研發,資源協調 1 優點 包含了底層測試 單元測試 和高層測試 系統測試 清楚的標識了開發和測試的各個階段 自上而下逐步求精,每個階段分工...