- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
STL容器 STL容器实现了一些常用的数据结构 vector 数组/堆栈 list 链表 queue 队列 deque 双向队列 set 集合 map 字典、映射 priority_queue 优先队列 Iterator 可以把Iterator看成某种指针,指向容器内部 C语言中的指针就是一种特殊的Iterator Iterator和指针一样支持*和-操作 可以使用Iterator的++运算符来遍历容器 一般的容器都提供了begin()和end()两个函数来得到指向容器头、尾的两个Iterator。其中begin指向头元素,end指向最后一个元素的后一个位置。 Iterator的分类 Input Iterator Output Iterator Forward Iterator Bidirectional Iterator 双向移动,只支持++和--操作 list/map/set Random Access Iterator 支持所有的指针操作 vector vector #include vector 动态数组 vectorint arr; arr = vectorint(10); arr.push_back(3); cout arr[2] endl; arr = arr2; if (arr arr2) vector 常用的操作 arr.clear(); arr.push_back(5); arr.pop_back(); arr.front(); arr.back(); arr.erase(arr.begin() + 5); arr.erase(arr.begin(), arr.end()); arr.insert(arr.begin() + 5, 4); vector vector的初始化 vectorint arr(100, 0); 或者 arr = vectorint(100, 0); vector VS 数组 vector的灵活性比较好,不需要考虑长度问题,可以减少编程复杂度,使用起来和数组一样方便。但是vector的效率远低于数组,在效率要求较高时慎用。 vector vector的遍历 for (vectorint::iterator vi = arr.begin(); vi != arr.end(); ++vi) { cout *vi endl; } 或者 for (int i = 0; i v.size(); ++i) { cout v[i] endl; } list #include list 双向链表 push_back, pop_back, push_front, pop_front 由链表的特性可知,list的迭代器不支持算数运算。例如l.begin() + 5是非法的,而list也不支持[]运算符,因此遍历list只能使用Iterator方式。 deque #include deque 双向队列 deque是vector和list的中间产物,其内部结构是若干小段被连接起来的连续空间。 deque支持push_front和pop_front deque和vector一样支持下标访问 deque的实现比vector和list都要复杂,因此直接影响了它的效率。 priority_queue #include deque 用最大堆实现的优先队列 priority_queue中的元素需要支持操作符。 priority_queue不支持clear操作。 常用操作 pq.top(); pq.push(5); pq.pop(); priority_queue 相关题目 ZOJ 2724,2006年校赛预赛题 模拟windows消息队列机制,随着时间不断有新的消息加入到队列,不同的消息有不同的权重,权重高的要先处理。 set #include set 有序的元素集合,set中的元素也要支持操作符 支持元素插入、删除和查找,复杂度为O(logN) 双向迭代器,不支持随机访问 常用操作 setint s; s.insert(3); s.erase(5); if (s.find(5) == s.end()) // 5不在集合中 set set的遍历 for (setint::iterator si = s.begin(); si != s.end(); ++si) { cout *si endl; } 遍历的顺序是有序的 map #include map 实现任意两个类型元素之间的映射 mapstring, int m; // key, value 要求key支持运算符,1个key最多只能对应1个value 效果与setpairstring, int 类似 常用操作 map
您可能关注的文档
最近下载
- 12J502-2内装修-室内吊顶.pdf VIP
- 全球及中国白蚁防治服务行业市场发展分析及前景趋势与投资发展研究报告2025-2028版.docx
- 2025年党员干部应知应会理论知识题库判断题测试卷附答案.docx VIP
- 医院检验科培训课件:《临床血液与体液检验基本技术标准》的解读(血液部分).pptx
- 2024年山西临汾尧都区社区工作者招聘真题.docx VIP
- 苯酚的理化性质及危险特性表.doc VIP
- 颈椎间盘突出护理.pptx VIP
- 线性代数英文课件:ch5-4(not necessary).ppt VIP
- 《SJT11223-2000-铜包铝线》.pdf VIP
- 民乐介绍课件.pptx VIP
文档评论(0)