《演算法筆記》第六章學習筆記

2021-10-21 18:45:08 字數 4689 閱讀 4217

vector是向量,可以理解成「變長陣列」,使用前需要新增下列語句

#include using namespace std;
vectorname;//單獨定義

vectorarrayname[arraysize];//定義陣列,相當於二元陣列

name[index]//下標訪問
push_back(i);//在vi後面新增i

pop_back();//刪除末尾元素

size()//獲取vector個數

clear();//清空vector

begin()//首元素位址

insert(it,x);//在it處新增元素x

erase(it);//刪除it處的元素

erase(first.last);//刪除[first,last)的所有元素

可以理解成指標

vector ::iterator it=vi.begin();//定義迭代器it指向首元素位址,此時*it就代表了vi的首元素
set是集合,自動遞增排序,元素互不重複,使用前需要新增標頭檔案

可以用來去重並公升序排序

#include using namespace std;
set name;//單獨定義

setarrayname[arraysize];//定義陣列,陣列中每乙個都是set容器

set只能用迭代器訪問

set::iterator it;//可以通過*it訪問,但不能用*(it+i)
insert(x);//插入x

find(value);//返回值為value的迭代器

erase(it);//刪除迭代器為it的元素

erase(value);//刪除值為value的元素

erase(first,last);//刪除[first,last)區間的元素

clear();//清空所有元素

字串,使用前需新增標頭檔案

字串可以直接通過加法拼接,直接比較大小(字典序)

#include using  namespace std;
string str="abc";

str[i]

輸入輸出只能用cin和cout

string::iterator it;
string迭代器支援直接加減某個數字

length()//返回str的長度,即存放的字元數

insert(pos,string);//在pos的位置插入字串string

insert(it,it2,it3);//在it的位置插入字串[it2,it3)

erase(it);//刪除迭代器為it的元素

erase(first,last);//刪除[first,last)區間的元素

erase(pos,length)://刪除從pos開始的length個字元

clear();//清空字串

substr(pos,len)//返回從pos開始長度為len的子串

find(str2)//若str2為子串,返回第一次出現的位置,如果不是,返回string::npos

replace(pos,len,str2);//把從pos開始長度為len的子串替換為str2

replace(it1,it2,str2);//把[it1,it2)替換為str2

map可以將基本型別對映到基本型別,基本型別也可以是stl容器,使用前需新增標頭檔案

可以用來建立字元(串)與整數之間的聯絡,判斷大整數或者其他型別是否存在的題目,把map當bool陣列用

#include using namespace std;
如果是字串到整數的對映必須使用string而不是char

mapmp;
mp[type1]//相當於mp[type2]
map::iterator it;

it ->first//當前對映的鍵

it ->second//當前對映的值

find(key)//返回鍵為key的迭代器

erase(it);//刪除迭代器為it的元素

erase(key);//刪除鍵為key的元素

erase(first,last);//刪除迭代器為[first,last)的元素

size()//對映的對數

clear();//清空

佇列,使用前需新增標頭檔案

#include using namespace std;
queue name;
使用front和back之前要先用empty判斷一下佇列是否為空

front()//隊首元素

back()//隊尾元素

push(x);//將x入隊

pop();//令首元素出列

empty()//檢測queue是否為空,返回true則空,返回false則空

size()//佇列元素個數

優先佇列

先新增和queue一樣的標頭檔案

#include using namespace std;

priority_queuename;

top()//訪問優先順序最高的元素
push(x);//將x入隊

pop();//令隊首元素出隊

empty()//檢測queue是否為空,返回true則空,返回false則非空

size()//佇列元素個數

基本資料型別

一般是數字大的優先順序高,定義如下

priority_queueq;

priority_queue,less> q;//兩者等價

想讓數字小的優先順序大只需

priority_queue,greater> q;
結構體型別

在結構體裡面過載小於號即可

struct fruit

};

這樣之後f1再定義fruit型別的優先佇列,內部就是以**高的水果為優先順序高

也可以把過載函式寫在結構體外面

struct cmp

}priority_queue, cmp> q;//定義

棧,後進先出的容器,使用前需加上標頭檔案

#include using namespace std;

stackname;//定義

top()//訪問棧頂元素
push(x);//將x入棧

pop();//彈出棧頂元素

empty()//返回true則空,返回false則非空

size()//返回元素個數

把兩個元素綁在一起作為乙個合成元素,可以看成有兩個元素的結構體

#include //新增map標頭檔案後會自動新增utility

using namespace std;

pairname(value1,value2);//value為初始化元素

pair.first//訪問第乙個元素

pair.second//訪問第二個元素

兩個pair型別比較是先比較first再比較second

使用前需新增標頭檔案

#include using namespace std;

max(x,y)//返回較大值

min(x.y)//返回較小值

abs(x)//返回絕對值

swap(x,y);//交換x,y的值

reverse(it,it2);//將[it,it2)的元素進行反轉

next_permutation(序列);//給出乙個序列在全排列中的下乙個序列

fill(區間,值);//把某段區間賦為相同的某個值

lower_bound(first,last,val)//尋找在[first,last)範圍內第乙個值大於等於val的位置,如果是陣列則返回指標,如果是容器則返回迭代器,如果沒有要尋找的元素則返回可以插入該元素的指標或迭代器

upper_bound(first,last,val)//尋找在[first,last)範圍內第乙個值大於等於val的位置,如果是陣列則返回指標,如果是容器則返回迭代器,如果沒有要尋找的元素則返回可以插入該元素的指標或迭代器

sort(首元素位址,尾元素位址,比較函式(非必填));;//預設從小到大排序
如果需要從大到小,則需要使用比較函式

bool bmp(int a,int b)
stl容器中,只有vector,string,deque可以用sort

第六章 學習筆記

1.引數分為位置引數和關鍵字引數。def func positional para x,y,z passdef func keyword para kwd1 1,kwd2 4,kwd3 9 pass2.1 當有多個位置引數時,可以用乙個星號來收集引數,函式內使用這些位置引數時可以通過for 迴圈依次...

第六章學習筆記

人員中斷 程序中斷 硬體中斷 程序的陷阱錯誤 按 ctrl c 組合鍵通常會導致當前執行的程序終止。原因如下 ctrl c組合鍵會生成乙個鍵盤硬體中斷。鍵盤中斷處理程式將ctrl c組合鍵轉換為sigint 2 訊號,傳送給終端上的所有程序,並喚醒等待鍵盤輸入的程序。在核心模式下,每個程序都要檢查和...

第六章筆記

頂層const與底層const的區別 頂層const是指標物件本身是乙個常量,而底層const是指標所指的物件是乙個常量,理解起來就相當於前者是直接,後者是間接。宣告函式可以多次,但是每個形參只能用實參預設初始化一次,即後續宣告只可以為未預設初始化的形參新增預設實參,而且其形參右側的所有形參必須都有...