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來訪問value,如果我們可以確定key存在;
(*it)
.first (
*it)
.second
map自定義排序與set類似,針對的是鍵
對於自定義型別,必須制定排序規則,這裡的自定義型別只針對鍵key
C 入門1 2 繼承
class derivedclass baseclass 乙個類最多隻允許從乙個其他類派生 derivedclass還可以派生出更多的類。不需要也不能顯式指定繼承是公共 私有還是保護,因為c 的繼承都是公共的。派生類包含基類所有的方法和字段。在派生類中呼叫基類構造器來進行基類欄位的初始化。class...
《c 入門經典》筆記12
引用是乙個別名。建立引用時,使用另乙個物件 目標 的名稱來初始化它,從此以後該引用就像是目標的另乙個名稱,對引用執行的任何操作實際上針對的就是目標。有些書上說引用就是指標,這不正確。雖然引用常常是使用指標實現的,但是只有編譯器開發人員關心這一點,作為程式設計師,必須區分這兩種概念。指標是儲存另乙個物...
C 基礎入門
類 類是資料和函式的封裝體,類也是一種資料型別。在類中資料稱為資料成員,函式稱為成員函式。類的定義一般形式 class 類名 資料成員同結構struct中的資料是一致的,成員函式是對類的私有資料成員操作的惟一途徑。類的成員函式宣告的結構如下 型別 成員函式名 參數列 最後的分號不可以省略 成員函式定...