C++_STL詳解print_第1頁
C++_STL詳解print_第2頁
C++_STL詳解print_第3頁
C++_STL詳解print_第4頁
C++_STL詳解print_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nvectorvector模擬動態(tài)數(shù)組vector的元素可以是任意類型T,但必須具備賦值和拷貝能力(具有public拷貝構(gòu)造函數(shù)和重載的賦值操作符)必須包含的頭文件#include vector支持隨機存取vector的大?。╯ize)和容量(capacity)Fsize返回返回實際元素個數(shù)實際元素個數(shù),F(xiàn)capacity返回返回vector能容納的能容納的元素最大數(shù)量元素最大數(shù)量。

2、如果插入元素時,。如果插入元素時,元素個數(shù)超過元素個數(shù)超過capacity,需要重新配置內(nèi)部存儲器。,需要重新配置內(nèi)部存儲器。西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nvector構(gòu)造、拷貝和析構(gòu)操作操作效果效果vector c產(chǎn)生空的產(chǎn)生空的vectorvector c1(c2)產(chǎn)生同類型的產(chǎn)生同類型的c1,并將復(fù)制,并將復(fù)制c2的所有元的所有元素素vector c(n)利用類型利用類型T的默認構(gòu)造函數(shù)和拷貝構(gòu)造函的默認

3、構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù)生成一個大小為數(shù)生成一個大小為n的的vectorvector c(n,e)產(chǎn)生一個大小為產(chǎn)生一個大小為n的的vector,每個元素都,每個元素都是是evector c(beg,end)產(chǎn)生一個產(chǎn)生一個vector,以區(qū)間,以區(qū)間beg,end為為元素初值元素初值vector()銷毀所有元素并釋放內(nèi)存。銷毀所有元素并釋放內(nèi)存。西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nvector非變動操作操作操作效果效

4、果c.size()返回元素個數(shù)返回元素個數(shù)c.empty()判斷容器是否為空判斷容器是否為空c.max_size()返回元素最大可能數(shù)量(固定值)返回元素最大可能數(shù)量(固定值)c.capacity()返回重新分配空間前可容納的最大元素數(shù)量返回重新分配空間前可容納的最大元素數(shù)量c.reserve(n)擴大容量為擴大容量為nc1=c2判斷判斷c1是否等于是否等于c2c1!=c2判斷判斷c1是否不等于是否不等于c2c1c2判斷判斷c1是否大于是否大于c2c1=c2判斷判斷c1是否小于等于是否小于等于c2西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer S

5、cience & Engineering, Xidian University, China STL容器容器nvector賦值操作 std:list l; std:vector v; v.assign(l.begin(),l.end();所有的賦值操作都有所有的賦值操作都有可能調(diào)用元素類型的可能調(diào)用元素類型的默認構(gòu)造函數(shù),拷貝默認構(gòu)造函數(shù),拷貝構(gòu)造函數(shù),賦值操作構(gòu)造函數(shù),賦值操作符和析構(gòu)函數(shù)符和析構(gòu)函數(shù)操作操作效果效果c1 = c2將將c2的全部元素賦值給的全部元素賦值給c1c.assign(n,e)將元素將元素e的的n個拷貝賦值給個拷貝賦值給cc.assign(beg,end)將區(qū)間

6、將區(qū)間beg;end的元素賦值給的元素賦值給cc1.swap(c2)將將c1和和c2元素互換元素互換swap(c1,c2)同上,全局函數(shù)同上,全局函數(shù)西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nvector元素存取 std:vector v;/empty v5= t;/runtime error std:cout v.front();/runtime error操作操作效果效果at(idx)返回索引返回索引idx所標識的元素

7、的引用,進行越界檢查所標識的元素的引用,進行越界檢查operator (idx)返回索引返回索引idx所標識的元素的引用,不進行越界檢查所標識的元素的引用,不進行越界檢查front()返回第一個元素的引用,不檢查元素是否存在返回第一個元素的引用,不檢查元素是否存在back()返回最后一個元素的引用,不檢查元素是否存在返回最后一個元素的引用,不檢查元素是否存在西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nvector迭代器相關(guān)函

8、數(shù) 迭代器持續(xù)有效,除非發(fā)生以下兩種情況:迭代器持續(xù)有效,除非發(fā)生以下兩種情況:(1)刪除或插入元素)刪除或插入元素(2)容量變化而引起內(nèi)存重新分配)容量變化而引起內(nèi)存重新分配操作操作效果效果begin()返回一個迭代器,指向第一個元素返回一個迭代器,指向第一個元素end()返回一個迭代器,指向最后一個元素之后返回一個迭代器,指向最后一個元素之后rbegin()返回一個逆向迭代器,指向逆向遍歷的第一個元素返回一個逆向迭代器,指向逆向遍歷的第一個元素rend()返回一個逆向迭代器,指向逆向遍歷的最后一個元素返回一個逆向迭代器,指向逆向遍歷的最后一個元素西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計

9、算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nvector安插(insert)元素操作操作效果效果c.insert(pos,e)在在pos位置插入元素位置插入元素e的副本,并返回新元的副本,并返回新元素位置素位置c.insert(pos,n,e)在在pos位置插入位置插入n個元素個元素e的副本的副本c.insert(pos,beg,end) 在在pos位置插入?yún)^(qū)間位置插入?yún)^(qū)間beg;end內(nèi)所有元素內(nèi)所有元素的副本的副本c.push_back(e)在尾部添加一個元素在尾

10、部添加一個元素e的副本的副本西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nvector移除(remove)元素操作操作效果效果c.pop_back()移除最后一個元素但不返回最后一個元素移除最后一個元素但不返回最后一個元素c.erase(pos)刪除刪除pos位置的元素,返回下一個元素的位置位置的元素,返回下一個元素的位置c.erase(beg,end)刪除區(qū)間刪除區(qū)間beg;end內(nèi)所有元素,返回下一個內(nèi)所有元素,返回下一個

11、元素的位置元素的位置c.clear()移除所有元素,清空容器移除所有元素,清空容器c.resize(num)將元素數(shù)量改為將元素數(shù)量改為num(增加的元素用(增加的元素用defalut構(gòu)構(gòu)造函數(shù)產(chǎn)生,多余的元素被刪除)造函數(shù)產(chǎn)生,多余的元素被刪除)c.resize(num,e)將元素數(shù)量改為將元素數(shù)量改為num(增加的元素是(增加的元素是e的副本)的副本)西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nvectorvector應(yīng)

12、用實例:vector西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器ndequedeque模擬動態(tài)數(shù)組deque的元素可以是任意類型T,但必須具備賦值和拷貝能力(具有public拷貝構(gòu)造函數(shù)和重載的賦值操作符)必須包含的頭文件#include deque支持隨機存取deque支持在頭部和尾部存儲數(shù)據(jù)deque不支持capacity和reserve操作西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Co

13、mputer Science & Engineering, Xidian University, China STL容器容器ndeque構(gòu)造、拷貝和析構(gòu)操作操作效果效果decque c產(chǎn)生空的產(chǎn)生空的dequedecque c1(c2)產(chǎn)生同類型的產(chǎn)生同類型的c1,并將復(fù)制,并將復(fù)制c2的所有元的所有元素素decque c(n)利用類型利用類型T的默認構(gòu)造函數(shù)和拷貝構(gòu)造函的默認構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù)生成一個大小為數(shù)生成一個大小為n的的dequedecque c(n,e)產(chǎn)生一個大小為產(chǎn)生一個大小為n的的deque ,每個元素都,每個元素都是是edecque c(beg,end)產(chǎn)生一個

14、產(chǎn)生一個deque ,以區(qū)間,以區(qū)間beg,end為為元素初值元素初值decque()銷毀所有元素并釋放內(nèi)存。銷毀所有元素并釋放內(nèi)存。西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器ndeque非變動操作操作操作效果效果c.size()返回元素個數(shù)返回元素個數(shù)c.empty()判斷容器是否為空判斷容器是否為空c.max_size()返回元素最大可能數(shù)量(固定值)返回元素最大可能數(shù)量(固定值)c1=c2判斷判斷c1是否等于是否等于c

15、2c1!=c2判斷判斷c1是否不等于是否不等于c2c1c2判斷判斷c1是否大于是否大于c2c1=c2判斷判斷c1是否小于等于是否小于等于c2西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器ndeque賦值操作 std:list l; std:deque v; v.assign(l.begin(),l.end();所有的賦值操作都有所有的賦值操作都有可能調(diào)用元素類型的可能調(diào)用元素類型的默認構(gòu)造函數(shù),拷貝默認構(gòu)造函數(shù),拷貝構(gòu)造函數(shù),賦

16、值操作構(gòu)造函數(shù),賦值操作符和析構(gòu)函數(shù)符和析構(gòu)函數(shù)操作操作效果效果c1 = c2將將c2的全部元素賦值給的全部元素賦值給c1c.assign(n,e)將元素將元素e的的n個拷貝賦值給個拷貝賦值給cc.assign(beg,end)將區(qū)間將區(qū)間beg;end的元素賦值給的元素賦值給cc1.swap(c2)將將c1和和c2元素互換元素互換swap(c1,c2)同上,全局函數(shù)同上,全局函數(shù)西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器n

17、deque元素存取 std:deque dq;/empty dq5= t;/runtime error std:cout dq.front(); /runtime error操作操作效果效果at(idx)返回索引返回索引idx所標識的元素的引用,進行越界檢查所標識的元素的引用,進行越界檢查operator (idx) 返回索引返回索引idx所標識的元素的引用,不進行越界檢查所標識的元素的引用,不進行越界檢查front()返回第一個元素的引用,不檢查元素是否存在返回第一個元素的引用,不檢查元素是否存在back()返回最后一個元素的引用,不檢查元素是否存在返回最后一個元素的引用,不檢查元素是否存在

18、西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器ndeque迭代器相關(guān)函數(shù) 迭代器持續(xù)有效,除非發(fā)生以下兩種情況:迭代器持續(xù)有效,除非發(fā)生以下兩種情況:(1)刪除或插入元素)刪除或插入元素(2)容量變化而引起內(nèi)存重新分配)容量變化而引起內(nèi)存重新分配操作操作效果效果begin()返回一個迭代器,指向第一個元素返回一個迭代器,指向第一個元素end()返回一個迭代器,指向最后一個元素之后返回一個迭代器,指向最后一個元素之后rbegin(

19、)返回一個逆向迭代器,指向逆向遍歷的第一個元素返回一個逆向迭代器,指向逆向遍歷的第一個元素rend()返回一個逆向迭代器,指向逆向遍歷的最后一個元素返回一個逆向迭代器,指向逆向遍歷的最后一個元素西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器ndeque安插(insert)元素操作操作效果效果c.insert(pos,e)在在pos位置插入元素位置插入元素e的副本,并返回新元的副本,并返回新元素位置素位置c.insert(pos,

20、n,e)在在pos位置插入位置插入n個元素個元素e的副本的副本c.insert(pos,beg,end) 在在pos位置插入?yún)^(qū)間位置插入?yún)^(qū)間beg;end內(nèi)所有元素內(nèi)所有元素的副本的副本c.push_back(e)在尾部添加一個元素在尾部添加一個元素e的副本的副本c.push_front(e)在頭部添加一個元素在頭部添加一個元素e的副本的副本西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器ndeque移除(remove)元素操作操

21、作效果效果c.pop_back()移除最后一個元素但不返回最后一個元素移除最后一個元素但不返回最后一個元素c.pop_front()移除第一個元素但不返回第一個元素移除第一個元素但不返回第一個元素c.erase(pos)刪除刪除pos位置的元素,返回下一個元素的位置位置的元素,返回下一個元素的位置c.erase(beg,end)刪除區(qū)間刪除區(qū)間beg;end內(nèi)所有元素,返回下一個內(nèi)所有元素,返回下一個元素的位置元素的位置c.clear()移除所有元素,清空容器移除所有元素,清空容器c.resize(num)將元素數(shù)量改為將元素數(shù)量改為num(增加的元素用(增加的元素用defalut構(gòu)構(gòu)造函數(shù)產(chǎn)

22、生,多余的元素被刪除)造函數(shù)產(chǎn)生,多余的元素被刪除)c.resize(num,e)將元素數(shù)量改為將元素數(shù)量改為num(增加的元素是(增加的元素是e的副本)的副本)西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器ndequedeque應(yīng)用實例: deque西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian Universi

23、ty, China STL容器容器nlist使用雙向鏈表管理元素list的元素可以是任意類型T,但必須具備賦值和拷貝能力必須包含的頭文件#include list不支持隨機存取,因此不提供下標操作符在任何位置上執(zhí)行元素的安插和移除都非常快。安插和刪除不會導(dǎo)致指向其他元素的指針、引用、iterator失效。西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nlist構(gòu)造、拷貝和析構(gòu)操作操作效果效果list c產(chǎn)生空的產(chǎn)生空的listl

24、ist c1(c2)產(chǎn)生同類型的產(chǎn)生同類型的c1,并將復(fù)制,并將復(fù)制c2的所有元素的所有元素list c(n)利用類型利用類型T的默認構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù)生的默認構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù)生成一個大小為成一個大小為n的的listlist c(n,e)產(chǎn)生一個大小為產(chǎn)生一個大小為n的的list,每個元素都是,每個元素都是elist c(beg,end)產(chǎn)生一個產(chǎn)生一個list,以區(qū)間,以區(qū)間beg,end為元素初值為元素初值list()銷毀所有元素并釋放內(nèi)存。銷毀所有元素并釋放內(nèi)存。西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science &a

25、mp; Engineering, Xidian University, China STL容器容器nlist非變動性操作操作操作效果效果c.size()返回元素個數(shù)返回元素個數(shù)c.empty()判斷容器是否為空判斷容器是否為空c.max_size()返回元素最大可能數(shù)量返回元素最大可能數(shù)量c1=c2判斷判斷c1是否等于是否等于c2c1!=c2判斷判斷c1是否不等于是否不等于c2c1c2判斷判斷c1是否大于是否大于c2c1=c2判斷判斷c1是否小于等于是否小于等于c2西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Eng

26、ineering, Xidian University, China STL容器容器nlist賦值操作操作效果效果c1 = c2將將c2的全部元素賦值給的全部元素賦值給c1c.assign(n,e)將將e的的n個拷貝賦值給個拷貝賦值給cc.assign(beg,end) 將區(qū)間將區(qū)間beg;end的元素賦值給的元素賦值給cc1.swap(c2)將將c1和和c2的元素互換的元素互換swap(c1,c2)同上,全局函數(shù)同上,全局函數(shù)西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian Un

27、iversity, China STL容器容器nlist元素存取 std:list l;/empty std:cout l.front();/runtime error if(!l.empty()std:coutl.back();/ok 操作操作效果效果front()返回第一個元素的引用,不檢查元素是否存在返回第一個元素的引用,不檢查元素是否存在back()返回最后一個元素的引用,不檢查元素是否存在返回最后一個元素的引用,不檢查元素是否存在西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xid

28、ian University, China STL容器容器nlist迭代器相關(guān)函數(shù)操作操作效果效果begin()返回一個雙向迭代器,指向第一個元素返回一個雙向迭代器,指向第一個元素end()返回一個雙向迭代器,指向最后一個元素之后返回一個雙向迭代器,指向最后一個元素之后rbegin()返回一個逆向迭代器,指向逆向遍歷的第一個元素返回一個逆向迭代器,指向逆向遍歷的第一個元素rend()返回一個逆向迭代器,指向逆向遍歷的最后一個元素返回一個逆向迭代器,指向逆向遍歷的最后一個元素西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science &

29、 Engineering, Xidian University, China STL容器容器nlist安插(insert)元素操作操作效果效果c.insert(pos,e)在在pos位置插入位置插入e的副本,并返回新元素位的副本,并返回新元素位置置c.insert(pos,n,e)在在pos位置插入位置插入n個個e的副本的副本c.insert(pos,beg,end) 在在pos位置插入?yún)^(qū)間位置插入?yún)^(qū)間beg;end內(nèi)所有元素內(nèi)所有元素的副本的副本c.push_back(e)在尾部添加一個在尾部添加一個e的副本的副本c.push_front(e)在頭部添加一個在頭部添加一個e的副本的副本西安電

30、子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nlist移除(remove)元素操作操作效果效果c.pop_back()移除最后一個元素但不返回移除最后一個元素但不返回c.pop_front()移除第一個元素但不返回移除第一個元素但不返回c.erase(pos)刪除刪除pos位置的元素,返回下一個元素的位置位置的元素,返回下一個元素的位置c.remove(val)移除所有值為移除所有值為val的元素的元素c.remove_if(op)

31、移除所有移除所有“op(val)=true”的元素的元素c.erase(beg,end) 刪除區(qū)間刪除區(qū)間beg;end內(nèi)所有元素,返回下一個元內(nèi)所有元素,返回下一個元素的位置素的位置c.clear()移除所有元素,清空容器移除所有元素,清空容器c.resize(num)將元素數(shù)量改為將元素數(shù)量改為num(多出的元素用(多出的元素用defalut構(gòu)構(gòu)造函數(shù)產(chǎn)生)造函數(shù)產(chǎn)生)c.resize(num,e)將元素數(shù)量改為將元素數(shù)量改為num(多出的元素是(多出的元素是e的副本)的副本)西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science &

32、amp; Engineering, Xidian University, China STL容器容器nlist特殊變動性操作操作操作效果效果c.unique移除重復(fù)元素,只留下一個移除重復(fù)元素,只留下一個c.unique(op)移除使移除使op()結(jié)果為結(jié)果為true的重復(fù)元素的重復(fù)元素c1.splice(pos,c2)將將c2內(nèi)的所有元素內(nèi)的所有元素轉(zhuǎn)移轉(zhuǎn)移到到c1的迭代器的迭代器pos之前之前c1.splice(pos,c2,c2pos)將將c2內(nèi)內(nèi)c2pos所指元素所指元素轉(zhuǎn)移轉(zhuǎn)移到到c1內(nèi)的內(nèi)的pos之前之前c1.splice(pos,c2,c2beg,c2end) 將將c2內(nèi)內(nèi)c2b

33、eg;c2end)區(qū)間內(nèi)所有元素區(qū)間內(nèi)所有元素轉(zhuǎn)移轉(zhuǎn)移到到c2的的pos之前之前西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nlist特殊變動性操作(續(xù))操作操作效果效果c.sort()以以operator 為準則對所有元素排序為準則對所有元素排序c.sort(op)以以op為準則對所有元素排序為準則對所有元素排序c1.merge(c2)假設(shè)假設(shè)c1和和c2都已排序,將都已排序,將c2全部元素轉(zhuǎn)移到全部元素轉(zhuǎn)移到c1并保證合并

34、后并保證合并后list仍為已排序仍為已排序c.reverse()將所有元素反序?qū)⑺性胤葱蛭靼搽娮涌萍即髮W(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nlistlist應(yīng)用實例:list西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap使用平衡二叉樹管理

35、元素元素包含兩部分(key,value),key和value可以是任意類型必須包含的頭文件#include 根據(jù)元素的key自動對元素排序,因此根據(jù)元素的key進行定位很快,但根據(jù)元素的value定位很慢不能直接改變元素的key,可以通過operator 直接存取元素值map中不允許key相同的元素,multimap允許key相同的元素西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap內(nèi)部存儲結(jié)構(gòu)74925

36、8111361012yyxyqywxzyqz西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap構(gòu)造、拷貝和析構(gòu)操作操作效果效果map c產(chǎn)生空的產(chǎn)生空的mapmap c1(c2)產(chǎn)生同類型的產(chǎn)生同類型的c1,并復(fù)制,并復(fù)制c2的所有元素的所有元素map c(op)以以op為排序準則產(chǎn)生一個空的為排序準則產(chǎn)生一個空的mapmap c(beg,end)以區(qū)間以區(qū)間beg,end內(nèi)的元素產(chǎn)生一個內(nèi)的元素產(chǎn)生一個m

37、apmap c(beg,end,op)以以op為排序準則,以區(qū)間為排序準則,以區(qū)間beg,end內(nèi)的元內(nèi)的元素產(chǎn)生一個素產(chǎn)生一個map map()銷毀所有元素并釋放內(nèi)存。銷毀所有元素并釋放內(nèi)存。其中map可以是下列形式map一個以less()為排序準則的map,map一個以op為排序準則的map西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap非變動性操作操作操作效果效果c.size()返回元素個數(shù)返回元素

38、個數(shù)c.empty()判斷容器是否為空判斷容器是否為空c.max_size()返回元素最大可能數(shù)量返回元素最大可能數(shù)量c1=c2判斷判斷c1是否等于是否等于c2c1!=c2判斷判斷c1是否不等于是否不等于c2c1c2判斷判斷c1是否大于是否大于c2c1=c2判斷判斷c1是否小于等于是否小于等于c2西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap賦值操作操作效果效果c1 = c2將將c2的全部元素賦值給的全

39、部元素賦值給c1c1.swap(c2)將將c1和和c2的元素互換的元素互換swap(c1,c2)同上,全局函數(shù)同上,全局函數(shù)西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap特殊搜尋操作操作操作效果效果count(key)返回返回”鍵值等于鍵值等于key”的元素個數(shù)的元素個數(shù)find(key)返回返回”鍵值等于鍵值等于key”的第一個元素,找不到返的第一個元素,找不到返回回endlower_bound(ke

40、y) 返回返回”鍵值大于等于鍵值大于等于key”的第一個元素的第一個元素upper_bound(key) 返回返回”鍵值大于鍵值大于key”的第一個元素的第一個元素equal_range(key)返回返回”鍵值等于鍵值等于key”的元素區(qū)間的元素區(qū)間西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap迭代器相關(guān)函數(shù)操作操作效果效果begin()返回一個雙向迭代器,指向第一個元素返回一個雙向迭代器,指向第一個元

41、素end()返回一個雙向迭代器,指向最后一個元素之后返回一個雙向迭代器,指向最后一個元素之后rbegin()返回一個逆向迭代器,指向逆向遍歷的第一個元素返回一個逆向迭代器,指向逆向遍歷的第一個元素rend()返回一個逆向迭代器,指向逆向遍歷的最后一個元素返回一個逆向迭代器,指向逆向遍歷的最后一個元素西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap安插(insert)元素操作操作效果效果c.insert(p

42、os,e)在在pos位置為起點插入位置為起點插入e的副本,并返回新的副本,并返回新元素位置(插入速度取決于元素位置(插入速度取決于pos)c.insert(e)插入插入e的副本,并返回新元素位置的副本,并返回新元素位置c.insert(beg,end)將區(qū)間將區(qū)間beg;end內(nèi)所有元素的副本插入到內(nèi)所有元素的副本插入到c中中西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap移除(remove)元素操作操作

43、效果效果c.erase(pos)刪除迭代器刪除迭代器pos所指位置的元素,無返回值所指位置的元素,無返回值c.erase(val)移除所有值為移除所有值為val的元素,返回移除元素個數(shù)的元素,返回移除元素個數(shù)c.erase(beg,end) 刪除區(qū)間刪除區(qū)間beg;end內(nèi)所有元素,無返回值內(nèi)所有元素,無返回值c.clear()移除所有元素,清空容器移除所有元素,清空容器西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/m

44、ultimapmap應(yīng)用實例:map西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nstack(實例:(實例:stack )后進先出(LIFO)#include 核心接口Fpush(value)將元素壓棧將元素壓棧Ftop()返回棧頂元素的引用,但不移除返回棧頂元素的引用,但不移除Fpop()從棧中移除棧頂元素,但不返回從棧中移除棧頂元素,但不返回實例:stackstacktop()pop()push()西安電子科技大學(xué)計算機學(xué)

45、院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nqueue(實例:(實例:queue )先進先出(FIFO)#include 核心接口Fpush(e)將元素置入隊列將元素置入隊列Ffront()返回隊列頭部元素的引用,但不移除返回隊列頭部元素的引用,但不移除Fback()返回隊列尾部元素的引用,但不移除返回隊列尾部元素的引用,但不移除Fpop()從隊列中移除元素,但不返回從隊列中移除元素,但不返回實例:queuequeuefront()pop()pus

46、h()back()西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL容器容器npriority_queue (實例:(實例:priority_queue )以某種排序準則(默認為less)管理隊列中的元素#include 核心接口Fpush(e)根據(jù)元素的優(yōu)先級將元素置入隊列根據(jù)元素的優(yōu)先級將元素置入隊列Ftop()返回優(yōu)先隊列頭部最大的元素的引用,但不移除返回優(yōu)先隊列頭部最大的元素的引用,但不移除Fpop()從棧中移除最大元素,但不返回從

47、棧中移除最大元素,但不返回Fempty() 隊列是否為空隊列是否為空西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL算法算法nSTL提供了一些標準算法來處理容器內(nèi)的元素提供了一些標準算法來處理容器內(nèi)的元素搜尋、排序、拷貝、數(shù)值運算nSTL的算法是全局函數(shù)的算法是全局函數(shù)明確劃分數(shù)據(jù)和操作泛型函數(shù)式編程模式所有算法可以對所有容器適用,甚至可以操作不同類型容器的元素n算法頭文件算法頭文件#include #include nSTL算法實例:算

48、法實例:algorithm西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n區(qū)間(區(qū)間(range)所有算法都用來處理一個或多個區(qū)間內(nèi)的元素。區(qū)間可以但不一定涵蓋容器內(nèi)所有元素為了操作元素的某個子集必須將區(qū)間的首尾(iterator)當作兩個參數(shù)傳遞給算法調(diào)用時必須確保區(qū)間有效性F從起點出發(fā),逐一前進,能夠到達終點。從起點出發(fā),逐一前進,能夠到達終點。F區(qū)間首尾兩個迭代器必須屬于同一容器,且前后放置正確區(qū)間首尾兩個迭代器必須屬于同

49、一容器,且前后放置正確F無效區(qū)間可能會引起無限循環(huán)或者內(nèi)存非法訪問無效區(qū)間可能會引起無限循環(huán)或者內(nèi)存非法訪問所有算法處理的都是半開區(qū)間begin, end)西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL算法算法nSTL算法分類算法分類非變動性算法(nonmodifying algorithms)變動性算法(modifying algorithms)移除性算法(removing algorithms)變序性算法(mutating algo

50、rithms)排序性算法(sorting algorithms)已序區(qū)間算法(sorted range algorithms)數(shù)值算法(numeric algorithms)西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL算法算法nfor_each()算法算法for_each(InputIterator beg, InputIterator end, UnaryProc op)對區(qū)間beg, end)中的每一個元素調(diào)用op(elem)返回

51、op之后的容器副本op可以改變元素op的返回值被忽略復(fù)雜度:O(n)示例:foreach西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n非變動性算法非變動性算法既不改變元素次序也不改變元素值名稱名稱作用作用count()返回元素個數(shù)返回元素個數(shù)count_if()返回滿足某一條件的元素個數(shù)返回滿足某一條件的元素個數(shù)min_element()返回最小元素(以迭代器表示)返回最小元素(以迭代器表示)max_element() 返回最

52、大元素(以迭代器表示)返回最大元素(以迭代器表示)find()搜尋等于某值的第一個元素搜尋等于某值的第一個元素find_if()搜尋滿足某個準則的第一個元素搜尋滿足某個準則的第一個元素search_n()搜尋具有某種特性的第一段搜尋具有某種特性的第一段“n個連續(xù)元素個連續(xù)元素”search()搜尋某個區(qū)間第一次出現(xiàn)的位置搜尋某個區(qū)間第一次出現(xiàn)的位置西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n非變動性算法非變動性算法元素計數(shù)c

53、ount(InputIterator beg,InputIterator end, const T& value)F計算區(qū)間中值等于計算區(qū)間中值等于value的元素個數(shù)的元素個數(shù)count(InputIterator beg,InputIterator end, Predicate op)F計算區(qū)間中使判斷式計算區(qū)間中使判斷式op結(jié)果為結(jié)果為true的元素個數(shù)的元素個數(shù)Fop接受單個參數(shù),返回值為bool型復(fù)雜度:O(n)示例:count西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering,

54、Xidian University, China STL算法算法n非變動性算法非變動性算法最小值和最大值min_element(InputIterator beg,InputIterator end)min_element(InputIterator beg,InputIterator end, CompFunc op)max_element(InputIterator beg,InputIterator end)max_element(InputIterator beg,InputIterator end, CompFunc op)F返回區(qū)間中最大或最小元素的返回區(qū)間中最大或最小元素的位置(

55、迭代器)F無無op參數(shù)的版本以參數(shù)的版本以(“小于”運算符)進行比較進行比較Fop用來比較兩個元素:用來比較兩個元素:bool op(elem1,elem2),如果,如果elem1“小于小于”elem2返回返回true否則返回否則返回false復(fù)雜度: O(n)示例:minmax西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n非變動性算法非變動性算法搜尋元素find (InputIterator beg,InputIterato

56、r end, const T& value)F返回區(qū)間中第一個返回區(qū)間中第一個“元素值等于元素值等于value”的元素位置的元素位置find_if (InputIterator beg,InputIterator end, Predicate op)F返回區(qū)間中第一個返回區(qū)間中第一個“使使op結(jié)果為結(jié)果為true”的元素位置的元素位置如果沒有找到匹配元素,返回end復(fù)雜度: O(n)示例:find西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, Ch

57、ina STL算法算法n變動性算法變動性算法直接改變元素值或者在復(fù)制到另一區(qū)間過程中改變元素值名稱名稱作用作用copy()從第一個元素開始正向復(fù)制某段區(qū)間從第一個元素開始正向復(fù)制某段區(qū)間copy_backward()從最后一個元素開始反向復(fù)制某段區(qū)間從最后一個元素開始反向復(fù)制某段區(qū)間transform()變動(并復(fù)制)元素,將兩個區(qū)間的元素合并變動(并復(fù)制)元素,將兩個區(qū)間的元素合并merge()合并兩個區(qū)間合并兩個區(qū)間swap_ranges()交換兩個區(qū)間的元素交換兩個區(qū)間的元素fill()以給定值替換每個元素以給定值替換每個元素fill_n()以給定值替換以給定值替換n個元素個元素gene

58、rate()以某項操作的結(jié)果替換每個元素以某項操作的結(jié)果替換每個元素西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n變動性算法變動性算法copy(s_beg, s_end, d_beg) 將s_beg,s_end)區(qū)間內(nèi)的元素復(fù)制到d_beg位置之后copy_backword(s_beg, s_end, d_end)將s_beg,s_end)區(qū)間內(nèi)的元素復(fù)制到dend位置之前復(fù)雜度:O(n)示例:copy西安電子科技大學(xué)計算機學(xué)

59、院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n移除性算法移除性算法移除某區(qū)間內(nèi)的元素或者在復(fù)制過程中移除元素值名稱名稱作用作用remove()將等于某個特定值的元素全部移除將等于某個特定值的元素全部移除remove_if()將滿足某準則的元素全部移除將滿足某準則的元素全部移除remove_copy()將不等于某特定值的元素全部復(fù)制到其他地方將不等于某特定值的元素全部復(fù)制到其他地方remove_copy_if() 將不滿足某準則的元素全部復(fù)制到其他地方

60、將不滿足某準則的元素全部復(fù)制到其他地方unique()移除相鄰的重復(fù)元素移除相鄰的重復(fù)元素unique_copy()移除相鄰的重復(fù)元素,并復(fù)制到其他地方移除相鄰的重復(fù)元素,并復(fù)制到其他地方西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n移除性算法移除性算法remove(beg,end,value)移除區(qū)間beg,end)內(nèi)和value相等的元素remove_if(beg,end,op)移除區(qū)間beg,end)內(nèi)使操作op為true的元素remove和remove_if只是將未移除元素向前移動,覆蓋移除元素,并返回新的終點,并沒有真正刪除元素,真正刪除元素需要使用erase復(fù)雜度:O(n)示例:remove西安電子科技大學(xué)計算機學(xué)院西安電子科技大學(xué)計算機學(xué)院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n變序性算法變序性算法通過元素的賦值和交換改變

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論