C 基礎入門 12

2021-10-09 16:36:03 字數 3234 閱讀 4316

deque容器:

雙端陣列,,可以對頭部進行插入和刪除,也可以對尾端

與vector區別:

vector對頭部的插入刪除效率低,資料量越大,效率越低

deque對頭部的插入刪除更快

vector訪問元素的速度更快

deque內部工作原理:

內部有中控器,維護每段緩衝區的內容,緩衝區中存放真實資料

中控器維護的是每個緩衝區的位址,使得使用deque像一片連續的空間

deque的容器的迭代器也是支援隨機訪問的

deque容器的建構函式,賦值。。。都與vector差不多

以下注意:

void

printdeque

(const deque<

int>

&d) cout << endl;

} 注意:const_iterator

deque插入和刪除:

push_front

(elem)

;pop_front()

;deque排序:

#include

sort

(iterator beg,iterator end)

;預設從小到大

對於支援隨機訪問的迭代器都可以用sort來進行排序

vector也可以用sort

rand%

41 :0

~40

rand%41+

60 : 60

~100

加隨機數種子:srand((

unsigned

int)

time

(null))

;stack容器:

先進後出,只有乙個出口

棧不允許遍歷行為

棧可以判斷容器是否為空

while

(!s.

empty()

) cout << s.

size()

)push

(elem)

pop(

)empty()

size()

queue容器:

先進先出

只有隊頭和隊尾可以被外界訪問,因此不予許有遍歷行為

push

(elem)

pop(

)back()

front()

empty()

size()

list容器:

鍊錶:物理儲存單元為非連續的

鍊錶:資料域和指標域

可以對任意位置進行快速刪除和插入

但是遍歷速度慢,沒有陣列快

占用空間比陣列大

在stl中是雙向迴圈鍊錶

鍊錶的儲存方式不是連續的記憶體空間,因此鍊錶list中的迭代器只支援前移和後移,屬於雙向迭代器

不會造成記憶體浪費和溢位

remove

list不可以l1[

0]或者l1.at(

0)不予許迭代器+

1,+2,+

3,只能++

reverse

()反轉

sort

()排序,所有不支援隨機訪問迭代器的容器,不可以用標準演算法sort

所以不能sort

(l1.

begin()

,l2.

end())

; l1.

sort()

;//預設排序規則 從小到大 公升序

bool

mycompare

(int v1,

int v2)

l1.sort

(mycompare)

;set/multiset容器:

插入時會自動排序

屬於關聯式容器,底層結構是用二叉樹實現的

set不允許重複

multiset允許重複

插入資料:

insert

不允許resize

find

count

pair對組:

pairint>p(

"tom",20

);pairint> p2 =

make_pair

("jerry",30

);p.first p.second

改變set容器的排序規則:

#include

不能插入資料後才去修改排序規則

class

mycompare

} set<

int,mycompare>s2;

//利用仿函式

s2.insert(10

);迭代器也要set<

int,mycompare>

::iterator it =s2.

begin()

對於自定義資料型別,不知道怎麼插入,要自定義排序規則,不然編譯器不知道怎麼插入,怎麼排序

class

compareperson

}map:

map中所有的元素都是pair

pair中第乙個元素為key,第二個元素為value

所有元素都會根據key值自動排序

map/multimap屬於關聯式容器,底層結構是用二叉樹來實現的

可以根據key快速找到value

map不予許容器中有重複key值

multimap允許容器中有重複key值

#include

map<

int,

int> m;

m.insert

(pair<

>

int,

int?(1

,10))

; m.

insert

(make_pair(2

,10))

; m.

insert

(map<

int,

int>

::value_type(3

,30))

; m[4]

=40; cout<< m[5]

//不建議用來插入,但可以用key來訪問value,如果我們可以確定key存在;

(*it)

.first (

*it)

.second

map自定義排序與set類似,針對的是鍵

對於自定義型別,必須制定排序規則,這裡的自定義型別只針對鍵key

C 入門1 2 繼承

class derivedclass baseclass 乙個類最多隻允許從乙個其他類派生 derivedclass還可以派生出更多的類。不需要也不能顯式指定繼承是公共 私有還是保護,因為c 的繼承都是公共的。派生類包含基類所有的方法和字段。在派生類中呼叫基類構造器來進行基類欄位的初始化。class...

《c 入門經典》筆記12

引用是乙個別名。建立引用時,使用另乙個物件 目標 的名稱來初始化它,從此以後該引用就像是目標的另乙個名稱,對引用執行的任何操作實際上針對的就是目標。有些書上說引用就是指標,這不正確。雖然引用常常是使用指標實現的,但是只有編譯器開發人員關心這一點,作為程式設計師,必須區分這兩種概念。指標是儲存另乙個物...

C 基礎入門

類 類是資料和函式的封裝體,類也是一種資料型別。在類中資料稱為資料成員,函式稱為成員函式。類的定義一般形式 class 類名 資料成員同結構struct中的資料是一致的,成員函式是對類的私有資料成員操作的惟一途徑。類的成員函式宣告的結構如下 型別 成員函式名 參數列 最後的分號不可以省略 成員函式定...