C++_STL详解print_第1页
C++_STL详解print_第2页
C++_STL详解print_第3页
C++_STL详解print_第4页
C++_STL详解print_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nvectorvector模拟动态数组vector的元素可以是任意类型T,但必须具备赋值和拷贝能力(具有public拷贝构造函数和重载的赋值操作符)必须包含的头文件#include vector支持随机存取vector的大小(size)和容量(capacity)Fsize返回返回实际元素个数实际元素个数,Fcapacity返回返回vector能容纳的能容纳的元素最大数量元素最大数量。

2、如果插入元素时,。如果插入元素时,元素个数超过元素个数超过capacity,需要重新配置内部存储器。,需要重新配置内部存储器。西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nvector构造、拷贝和析构操作操作效果效果vector c产生空的产生空的vectorvector c1(c2)产生同类型的产生同类型的c1,并将复制,并将复制c2的所有元的所有元素素vector c(n)利用类型利用类型T的默认构造函数和拷贝构造函的默认

3、构造函数和拷贝构造函数生成一个大小为数生成一个大小为n的的vectorvector c(n,e)产生一个大小为产生一个大小为n的的vector,每个元素都,每个元素都是是evector c(beg,end)产生一个产生一个vector,以区间,以区间beg,end为为元素初值元素初值vector()销毁所有元素并释放内存。销毁所有元素并释放内存。西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nvector非变动操作操作操作效果效

4、果c.size()返回元素个数返回元素个数c.empty()判断容器是否为空判断容器是否为空c.max_size()返回元素最大可能数量(固定值)返回元素最大可能数量(固定值)c.capacity()返回重新分配空间前可容纳的最大元素数量返回重新分配空间前可容纳的最大元素数量c.reserve(n)扩大容量为扩大容量为nc1=c2判断判断c1是否等于是否等于c2c1!=c2判断判断c1是否不等于是否不等于c2c1c2判断判断c1是否大于是否大于c2c1=c2判断判断c1是否小于等于是否小于等于c2西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer S

5、cience & Engineering, Xidian University, China STL容器容器nvector赋值操作 std:list l; std:vector v; v.assign(l.begin(),l.end();所有的赋值操作都有所有的赋值操作都有可能调用元素类型的可能调用元素类型的默认构造函数,拷贝默认构造函数,拷贝构造函数,赋值操作构造函数,赋值操作符和析构函数符和析构函数操作操作效果效果c1 = c2将将c2的全部元素赋值给的全部元素赋值给c1c.assign(n,e)将元素将元素e的的n个拷贝赋值给个拷贝赋值给cc.assign(beg,end)将区间

6、将区间beg;end的元素赋值给的元素赋值给cc1.swap(c2)将将c1和和c2元素互换元素互换swap(c1,c2)同上,全局函数同上,全局函数西安电子科技大学计算机学院西安电子科技大学计算机学院 - 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()返回最后一个元素的引用,不检查元素是否存在返回最后一个元素的引用,不检查元素是否存在西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nvector迭代器相关函

8、数 迭代器持续有效,除非发生以下两种情况:迭代器持续有效,除非发生以下两种情况:(1)删除或插入元素)删除或插入元素(2)容量变化而引起内存重新分配)容量变化而引起内存重新分配操作操作效果效果begin()返回一个迭代器,指向第一个元素返回一个迭代器,指向第一个元素end()返回一个迭代器,指向最后一个元素之后返回一个迭代器,指向最后一个元素之后rbegin()返回一个逆向迭代器,指向逆向遍历的第一个元素返回一个逆向迭代器,指向逆向遍历的第一个元素rend()返回一个逆向迭代器,指向逆向遍历的最后一个元素返回一个逆向迭代器,指向逆向遍历的最后一个元素西安电子科技大学计算机学院西安电子科技大学计

9、算机学院 - 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位置插入区间位置插入区间beg;end内所有元素内所有元素的副本的副本c.push_back(e)在尾部添加一个元素在尾

10、部添加一个元素e的副本的副本西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nvector移除(remove)元素操作操作效果效果c.pop_back()移除最后一个元素但不返回最后一个元素移除最后一个元素但不返回最后一个元素c.erase(pos)删除删除pos位置的元素,返回下一个元素的位置位置的元素,返回下一个元素的位置c.erase(beg,end)删除区间删除区间beg;end内所有元素,返回下一个内所有元素,返回下一个

11、元素的位置元素的位置c.clear()移除所有元素,清空容器移除所有元素,清空容器c.resize(num)将元素数量改为将元素数量改为num(增加的元素用(增加的元素用defalut构构造函数产生,多余的元素被删除)造函数产生,多余的元素被删除)c.resize(num,e)将元素数量改为将元素数量改为num(增加的元素是(增加的元素是e的副本)的副本)西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nvectorvector应

12、用实例:vector西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器ndequedeque模拟动态数组deque的元素可以是任意类型T,但必须具备赋值和拷贝能力(具有public拷贝构造函数和重载的赋值操作符)必须包含的头文件#include deque支持随机存取deque支持在头部和尾部存储数据deque不支持capacity和reserve操作西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Co

13、mputer Science & Engineering, Xidian University, China STL容器容器ndeque构造、拷贝和析构操作操作效果效果decque c产生空的产生空的dequedecque c1(c2)产生同类型的产生同类型的c1,并将复制,并将复制c2的所有元的所有元素素decque c(n)利用类型利用类型T的默认构造函数和拷贝构造函的默认构造函数和拷贝构造函数生成一个大小为数生成一个大小为n的的dequedecque c(n,e)产生一个大小为产生一个大小为n的的deque ,每个元素都,每个元素都是是edecque c(beg,end)产生一个

14、产生一个deque ,以区间,以区间beg,end为为元素初值元素初值decque()销毁所有元素并释放内存。销毁所有元素并释放内存。西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器ndeque非变动操作操作操作效果效果c.size()返回元素个数返回元素个数c.empty()判断容器是否为空判断容器是否为空c.max_size()返回元素最大可能数量(固定值)返回元素最大可能数量(固定值)c1=c2判断判断c1是否等于是否等于c

15、2c1!=c2判断判断c1是否不等于是否不等于c2c1c2判断判断c1是否大于是否大于c2c1=c2判断判断c1是否小于等于是否小于等于c2西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器ndeque赋值操作 std:list l; std:deque v; v.assign(l.begin(),l.end();所有的赋值操作都有所有的赋值操作都有可能调用元素类型的可能调用元素类型的默认构造函数,拷贝默认构造函数,拷贝构造函数,赋

16、值操作构造函数,赋值操作符和析构函数符和析构函数操作操作效果效果c1 = c2将将c2的全部元素赋值给的全部元素赋值给c1c.assign(n,e)将元素将元素e的的n个拷贝赋值给个拷贝赋值给cc.assign(beg,end)将区间将区间beg;end的元素赋值给的元素赋值给cc1.swap(c2)将将c1和和c2元素互换元素互换swap(c1,c2)同上,全局函数同上,全局函数西安电子科技大学计算机学院西安电子科技大学计算机学院 - 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、西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器ndeque迭代器相关函数 迭代器持续有效,除非发生以下两种情况:迭代器持续有效,除非发生以下两种情况:(1)删除或插入元素)删除或插入元素(2)容量变化而引起内存重新分配)容量变化而引起内存重新分配操作操作效果效果begin()返回一个迭代器,指向第一个元素返回一个迭代器,指向第一个元素end()返回一个迭代器,指向最后一个元素之后返回一个迭代器,指向最后一个元素之后rbegin(

19、)返回一个逆向迭代器,指向逆向遍历的第一个元素返回一个逆向迭代器,指向逆向遍历的第一个元素rend()返回一个逆向迭代器,指向逆向遍历的最后一个元素返回一个逆向迭代器,指向逆向遍历的最后一个元素西安电子科技大学计算机学院西安电子科技大学计算机学院 - 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位置插入区间位置插入区间beg;end内所有元素内所有元素的副本的副本c.push_back(e)在尾部添加一个元素在尾部添加一个元素e的副本的副本c.push_front(e)在头部添加一个元素在头部添加一个元素e的副本的副本西安电子科技大学计算机学院西安电子科技大学计算机学院 - 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)删除区间删除区间beg;end内所有元素,返回下一个内所有元素,返回下一个元素的位置元素的位置c.clear()移除所有元素,清空容器移除所有元素,清空容器c.resize(num)将元素数量改为将元素数量改为num(增加的元素用(增加的元素用defalut构构造函数产

22、生,多余的元素被删除)造函数产生,多余的元素被删除)c.resize(num,e)将元素数量改为将元素数量改为num(增加的元素是(增加的元素是e的副本)的副本)西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器ndequedeque应用实例: deque西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian Universi

23、ty, China STL容器容器nlist使用双向链表管理元素list的元素可以是任意类型T,但必须具备赋值和拷贝能力必须包含的头文件#include list不支持随机存取,因此不提供下标操作符在任何位置上执行元素的安插和移除都非常快。安插和删除不会导致指向其他元素的指针、引用、iterator失效。西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nlist构造、拷贝和析构操作操作效果效果list c产生空的产生空的listl

24、ist c1(c2)产生同类型的产生同类型的c1,并将复制,并将复制c2的所有元素的所有元素list c(n)利用类型利用类型T的默认构造函数和拷贝构造函数生的默认构造函数和拷贝构造函数生成一个大小为成一个大小为n的的listlist c(n,e)产生一个大小为产生一个大小为n的的list,每个元素都是,每个元素都是elist c(beg,end)产生一个产生一个list,以区间,以区间beg,end为元素初值为元素初值list()销毁所有元素并释放内存。销毁所有元素并释放内存。西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science &a

25、mp; Engineering, Xidian University, China STL容器容器nlist非变动性操作操作操作效果效果c.size()返回元素个数返回元素个数c.empty()判断容器是否为空判断容器是否为空c.max_size()返回元素最大可能数量返回元素最大可能数量c1=c2判断判断c1是否等于是否等于c2c1!=c2判断判断c1是否不等于是否不等于c2c1c2判断判断c1是否大于是否大于c2c1=c2判断判断c1是否小于等于是否小于等于c2西安电子科技大学计算机学院西安电子科技大学计算机学院 - 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) 将区间将区间beg;end的元素赋值给的元素赋值给cc1.swap(c2)将将c1和和c2的元素互换的元素互换swap(c1,c2)同上,全局函数同上,全局函数西安电子科技大学计算机学院西安电子科技大学计算机学院 - 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()返回最后一个元素的引用,不检查元素是否存在返回最后一个元素的引用,不检查元素是否存在西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xid

28、ian University, China STL容器容器nlist迭代器相关函数操作操作效果效果begin()返回一个双向迭代器,指向第一个元素返回一个双向迭代器,指向第一个元素end()返回一个双向迭代器,指向最后一个元素之后返回一个双向迭代器,指向最后一个元素之后rbegin()返回一个逆向迭代器,指向逆向遍历的第一个元素返回一个逆向迭代器,指向逆向遍历的第一个元素rend()返回一个逆向迭代器,指向逆向遍历的最后一个元素返回一个逆向迭代器,指向逆向遍历的最后一个元素西安电子科技大学计算机学院西安电子科技大学计算机学院 - 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位置插入区间位置插入区间beg;end内所有元素内所有元素的副本的副本c.push_back(e)在尾部添加一个在尾部添加一个e的副本的副本c.push_front(e)在头部添加一个在头部添加一个e的副本的副本西安电

30、子科技大学计算机学院西安电子科技大学计算机学院 - 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) 删除区间删除区间beg;end内所有元素,返回下一个元内所有元素,返回下一个元素的位置素的位置c.clear()移除所有元素,清空容器移除所有元素,清空容器c.resize(num)将元素数量改为将元素数量改为num(多出的元素用(多出的元素用defalut构构造函数产生)造函数产生)c.resize(num,e)将元素数量改为将元素数量改为num(多出的元素是(多出的元素是e的副本)的副本)西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science &

32、amp; Engineering, Xidian University, China STL容器容器nlist特殊变动性操作操作操作效果效果c.unique移除重复元素,只留下一个移除重复元素,只留下一个c.unique(op)移除使移除使op()结果为结果为true的重复元素的重复元素c1.splice(pos,c2)将将c2内的所有元素内的所有元素转移转移到到c1的迭代器的迭代器pos之前之前c1.splice(pos,c2,c2pos)将将c2内内c2pos所指元素所指元素转移转移到到c1内的内的pos之前之前c1.splice(pos,c2,c2beg,c2end) 将将c2内内c2b

33、eg;c2end)区间内所有元素区间内所有元素转移转移到到c2的的pos之前之前西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nlist特殊变动性操作(续)操作操作效果效果c.sort()以以operator 为准则对所有元素排序为准则对所有元素排序c.sort(op)以以op为准则对所有元素排序为准则对所有元素排序c1.merge(c2)假设假设c1和和c2都已排序,将都已排序,将c2全部元素转移到全部元素转移到c1并保证合并

34、后并保证合并后list仍为已排序仍为已排序c.reverse()将所有元素反序将所有元素反序西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nlistlist应用实例:list西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap使用平衡二叉树管理

35、元素元素包含两部分(key,value),key和value可以是任意类型必须包含的头文件#include 根据元素的key自动对元素排序,因此根据元素的key进行定位很快,但根据元素的value定位很慢不能直接改变元素的key,可以通过operator 直接存取元素值map中不允许key相同的元素,multimap允许key相同的元素西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap内部存储结构74925

36、8111361012yyxyqywxzyqz西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap构造、拷贝和析构操作操作效果效果map c产生空的产生空的mapmap c1(c2)产生同类型的产生同类型的c1,并复制,并复制c2的所有元素的所有元素map c(op)以以op为排序准则产生一个空的为排序准则产生一个空的mapmap c(beg,end)以区间以区间beg,end内的元素产生一个内的元素产生一个m

37、apmap c(beg,end,op)以以op为排序准则,以区间为排序准则,以区间beg,end内的元内的元素产生一个素产生一个map map()销毁所有元素并释放内存。销毁所有元素并释放内存。其中map可以是下列形式map一个以less()为排序准则的map,map一个以op为排序准则的map西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap非变动性操作操作操作效果效果c.size()返回元素个数返回元素

38、个数c.empty()判断容器是否为空判断容器是否为空c.max_size()返回元素最大可能数量返回元素最大可能数量c1=c2判断判断c1是否等于是否等于c2c1!=c2判断判断c1是否不等于是否不等于c2c1c2判断判断c1是否大于是否大于c2c1=c2判断判断c1是否小于等于是否小于等于c2西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap赋值操作操作效果效果c1 = c2将将c2的全部元素赋值给的全

39、部元素赋值给c1c1.swap(c2)将将c1和和c2的元素互换的元素互换swap(c1,c2)同上,全局函数同上,全局函数西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap特殊搜寻操作操作操作效果效果count(key)返回返回”键值等于键值等于key”的元素个数的元素个数find(key)返回返回”键值等于键值等于key”的第一个元素,找不到返的第一个元素,找不到返回回endlower_bound(ke

40、y) 返回返回”键值大于等于键值大于等于key”的第一个元素的第一个元素upper_bound(key) 返回返回”键值大于键值大于key”的第一个元素的第一个元素equal_range(key)返回返回”键值等于键值等于key”的元素区间的元素区间西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap迭代器相关函数操作操作效果效果begin()返回一个双向迭代器,指向第一个元素返回一个双向迭代器,指向第一个元

41、素end()返回一个双向迭代器,指向最后一个元素之后返回一个双向迭代器,指向最后一个元素之后rbegin()返回一个逆向迭代器,指向逆向遍历的第一个元素返回一个逆向迭代器,指向逆向遍历的第一个元素rend()返回一个逆向迭代器,指向逆向遍历的最后一个元素返回一个逆向迭代器,指向逆向遍历的最后一个元素西安电子科技大学计算机学院西安电子科技大学计算机学院 - 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)将区间将区间beg;end内所有元素的副本插入到内所有元素的副本插入到c中中西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/multimap移除(remove)元素操作操作

43、效果效果c.erase(pos)删除迭代器删除迭代器pos所指位置的元素,无返回值所指位置的元素,无返回值c.erase(val)移除所有值为移除所有值为val的元素,返回移除元素个数的元素,返回移除元素个数c.erase(beg,end) 删除区间删除区间beg;end内所有元素,无返回值内所有元素,无返回值c.clear()移除所有元素,清空容器移除所有元素,清空容器西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nmap/m

44、ultimapmap应用实例:map西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nstack(实例:(实例:stack )后进先出(LIFO)#include 核心接口Fpush(value)将元素压栈将元素压栈Ftop()返回栈顶元素的引用,但不移除返回栈顶元素的引用,但不移除Fpop()从栈中移除栈顶元素,但不返回从栈中移除栈顶元素,但不返回实例:stackstacktop()pop()push()西安电子科技大学计算机学

45、院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器nqueue(实例:(实例:queue )先进先出(FIFO)#include 核心接口Fpush(e)将元素置入队列将元素置入队列Ffront()返回队列头部元素的引用,但不移除返回队列头部元素的引用,但不移除Fback()返回队列尾部元素的引用,但不移除返回队列尾部元素的引用,但不移除Fpop()从队列中移除元素,但不返回从队列中移除元素,但不返回实例:queuequeuefront()pop()pus

46、h()back()西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL容器容器npriority_queue (实例:(实例:priority_queue )以某种排序准则(默认为less)管理队列中的元素#include 核心接口Fpush(e)根据元素的优先级将元素置入队列根据元素的优先级将元素置入队列Ftop()返回优先队列头部最大的元素的引用,但不移除返回优先队列头部最大的元素的引用,但不移除Fpop()从栈中移除最大元素,但不返回从

47、栈中移除最大元素,但不返回Fempty() 队列是否为空队列是否为空西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL算法算法nSTL提供了一些标准算法来处理容器内的元素提供了一些标准算法来处理容器内的元素搜寻、排序、拷贝、数值运算nSTL的算法是全局函数的算法是全局函数明确划分数据和操作泛型函数式编程模式所有算法可以对所有容器适用,甚至可以操作不同类型容器的元素n算法头文件算法头文件#include #include nSTL算法实例:算

48、法实例:algorithm西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n区间(区间(range)所有算法都用来处理一个或多个区间内的元素。区间可以但不一定涵盖容器内所有元素为了操作元素的某个子集必须将区间的首尾(iterator)当作两个参数传递给算法调用时必须确保区间有效性F从起点出发,逐一前进,能够到达终点。从起点出发,逐一前进,能够到达终点。F区间首尾两个迭代器必须属于同一容器,且前后放置正确区间首尾两个迭代器必须属于同

49、一容器,且前后放置正确F无效区间可能会引起无限循环或者内存非法访问无效区间可能会引起无限循环或者内存非法访问所有算法处理的都是半开区间begin, end)西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL算法算法nSTL算法分类算法分类非变动性算法(nonmodifying algorithms)变动性算法(modifying algorithms)移除性算法(removing algorithms)变序性算法(mutating algo

50、rithms)排序性算法(sorting algorithms)已序区间算法(sorted range algorithms)数值算法(numeric algorithms)西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL算法算法nfor_each()算法算法for_each(InputIterator beg, InputIterator end, UnaryProc op)对区间beg, end)中的每一个元素调用op(elem)返回

51、op之后的容器副本op可以改变元素op的返回值被忽略复杂度:O(n)示例:foreach西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n非变动性算法非变动性算法既不改变元素次序也不改变元素值名称名称作用作用count()返回元素个数返回元素个数count_if()返回满足某一条件的元素个数返回满足某一条件的元素个数min_element()返回最小元素(以迭代器表示)返回最小元素(以迭代器表示)max_element() 返回最

52、大元素(以迭代器表示)返回最大元素(以迭代器表示)find()搜寻等于某值的第一个元素搜寻等于某值的第一个元素find_if()搜寻满足某个准则的第一个元素搜寻满足某个准则的第一个元素search_n()搜寻具有某种特性的第一段搜寻具有某种特性的第一段“n个连续元素个连续元素”search()搜寻某个区间第一次出现的位置搜寻某个区间第一次出现的位置西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n非变动性算法非变动性算法元素计数c

53、ount(InputIterator beg,InputIterator end, const T& value)F计算区间中值等于计算区间中值等于value的元素个数的元素个数count(InputIterator beg,InputIterator end, Predicate op)F计算区间中使判断式计算区间中使判断式op结果为结果为true的元素个数的元素个数Fop接受单个参数,返回值为bool型复杂度:O(n)示例:count西安电子科技大学计算机学院西安电子科技大学计算机学院 - 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返回区间中最大或最小元素的返回区间中最大或最小元素的位置(

55、迭代器)F无无op参数的版本以参数的版本以(“小于”运算符)进行比较进行比较Fop用来比较两个元素:用来比较两个元素:bool op(elem1,elem2),如果,如果elem1“小于小于”elem2返回返回true否则返回否则返回false复杂度: O(n)示例:minmax西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n非变动性算法非变动性算法搜寻元素find (InputIterator beg,InputIterato

56、r end, const T& value)F返回区间中第一个返回区间中第一个“元素值等于元素值等于value”的元素位置的元素位置find_if (InputIterator beg,InputIterator end, Predicate op)F返回区间中第一个返回区间中第一个“使使op结果为结果为true”的元素位置的元素位置如果没有找到匹配元素,返回end复杂度: O(n)示例:find西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, Ch

57、ina STL算法算法n变动性算法变动性算法直接改变元素值或者在复制到另一区间过程中改变元素值名称名称作用作用copy()从第一个元素开始正向复制某段区间从第一个元素开始正向复制某段区间copy_backward()从最后一个元素开始反向复制某段区间从最后一个元素开始反向复制某段区间transform()变动(并复制)元素,将两个区间的元素合并变动(并复制)元素,将两个区间的元素合并merge()合并两个区间合并两个区间swap_ranges()交换两个区间的元素交换两个区间的元素fill()以给定值替换每个元素以给定值替换每个元素fill_n()以给定值替换以给定值替换n个元素个元素gene

58、rate()以某项操作的结果替换每个元素以某项操作的结果替换每个元素西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n变动性算法变动性算法copy(s_beg, s_end, d_beg) 将s_beg,s_end)区间内的元素复制到d_beg位置之后copy_backword(s_beg, s_end, d_end)将s_beg,s_end)区间内的元素复制到dend位置之前复杂度:O(n)示例:copy西安电子科技大学计算机学

59、院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n移除性算法移除性算法移除某区间内的元素或者在复制过程中移除元素值名称名称作用作用remove()将等于某个特定值的元素全部移除将等于某个特定值的元素全部移除remove_if()将满足某准则的元素全部移除将满足某准则的元素全部移除remove_copy()将不等于某特定值的元素全部复制到其他地方将不等于某特定值的元素全部复制到其他地方remove_copy_if() 将不满足某准则的元素全部复制到其他地方

60、将不满足某准则的元素全部复制到其他地方unique()移除相邻的重复元素移除相邻的重复元素unique_copy()移除相邻的重复元素,并复制到其他地方移除相邻的重复元素,并复制到其他地方西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n移除性算法移除性算法remove(beg,end,value)移除区间beg,end)内和value相等的元素remove_if(beg,end,op)移除区间beg,end)内使操作op为true的元素remove和remove_if只是将未移除元素向前移动,覆盖移除元素,并返回新的终点,并没有真正删除元素,真正删除元素需要使用erase复杂度:O(n)示例:remove西安电子科技大学计算机学院西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China STL算法算法n变序性算法变序性算法通过元素的赋值和交换改变

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论