- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
STL架构
STL架构
STL主要包含了容器,算法,迭代器,仿函数,适配器,分配器
1.C++新特性:
模板 typename
内置类型的显示初始化 int value = int();
异常处理 try{ } catch{ }
命名空间:解决命名冲突问题,与class的比较
bool类型(true false被引入C++)
关键字explicit:用以限制隐式转换,用作构造函数时限制隐式初始化
新类型转换操作符:
static_casttypename:强制类型转换
dynamic_casttypename:用于多态型别转换
const_casttypename:用于const类型的去除和设置
reinterpret_casttypename:用于位解析转换
常数静态成员:类声明时赋值Class MyClass{static const int cValue = 100}
通用工具:
Pairs:用于map和multimap容易中的元素,快捷函数make_pair(key ,value)
智能指针auto_ptr:
用智能指针创建对象:std::auto_ptrClassA ptr(new ClassA)
智能指针的拥有权:赋值时转移(原指针被赋值为NULL,目标指针对象释放)
禁止使用值传递的方式把智能指针传入调用函数
用const修饰智能指针有助于防范被转移权限
数值极限
辅助函数:max,min,swap
容器
容器主要分成顺序容器和关联容器,附近功能的还有容器配接器
顺序容器:
动态数组Vector
动态数组支持随机访问,所以访问速度很快.(因为物理上是连续的)
支持快速尾部插入元素.但插入元素有可能导致所有关联迭代器失效.(因为插入可能导致vector的在内存上的重新部署)
可能设置容器的最大容量等
双向队列Deque
跟Vector基本一致,不过不提供容器容量的接口,支持头部快速插入.如果在中间插入元素时候,会导致整个Deque失效,迭代器是随机访问迭代器
链表List
物理上不连续,逻辑上连续.不支持随机访问,只支持双向访问
在结构任何地方都可以快速插入删除元素,且不会导致其他迭代器失效
字符串String
数组Array
关联容器(插入,删除代价均为logN,访问也为logN)
顺序集合Set
可重复顺序集合MultiSet
Set内部元素为一个值对象,根据某个特定的标准排序.
其内部结构是一颗平衡2叉树(BST),根据前序遍历来访问元素顺序
不能直接修改其元素,所以最好使用const版迭代器来访问(用删除和插入代替修改)
映射表Map
可重复映射表MultiMap
Map元素是一个pair结构体,包含键值对,其中键值不能被直接修改
???部是用红黑树实现的,从迭代器来看,内部有序
支持下标值访问,类似PHP的数组一样
容器适配器(把一个容器的接口封装成适应特定行为的容器)
栈Stacks
队列 Queue
优先级队列Priority Queue
迭代器
不同的迭代器具备不同的能力,而算法也需要不同能力的迭代器,因此,迭代器可分为5中级别(类型)
输入迭代器:
(单向)只能从容器中读出数据,如果把输入流作为容器,可以把数据从输入流读到程序中
输出迭代器:
(单向)只能把数据写入到容器中,如果把输出流作为容器,可以把数据从程序写入输出流中
前进迭代器:
具备输入和输出大部分功能:能读能写,单向前进
双向迭代器:
随机访问迭代器:
迭代器辅助函数:
advance(iter1, steps)可以让迭代器前进指定步数(要求至少为双向迭代器)
distance(iter1,iter2)返回两个迭代器之间的乘员数,如果不是随机访问迭代器,则iter1必须在iter2后面
iter_swap(iter1,iter2)交换迭代器所指向的内容
迭代器配接器:
逆向迭代器:(改变迭代器行为,区间倒置,++,--重载)
插入迭代器:(改变迭代器覆盖的行为,变成插入)
流迭代器:(把迭代器的操作重定向到指定的流对象里面)
仿函数 #includefunctional预定义仿函数和仿函数适配器安放文件
定义 :所谓仿函数,就是定义了operator()的对象
仿函数可以作为排序准则(STL部分算法需要缺省排序准则)
可以拥有内部状态
for_each的返回值是仿函数
比判别式(返回bool)高效
仿函数的适配器:
bind2nd:将一个2元仿函数变成1元仿函数
bind1st,not1,not2等
可以通过men_fun_ref(op)或者men_fun来指定调用对象的成员函数
算法 #includealgorithm
算法分类
非变动性算法:
count(c.begin, c.end, value)
min_element(c
您可能关注的文档
- IT项目进度管理.doc
- Involving Parents in their Children’s Learning Listening to Par.ppt
- jade历史第一单元隋唐.ppt
- javascript 小游戏-算二十四.ppt
- JAVA初级知识讲解文档.ppt
- java实训报告--高.doc
- JAVA课程设计-班级学生信息管理.doc
- Jayyfv2010年卫浴行业详细调查报告.doc
- JDK安装文档.doc
- java聊天感.doc
- 第18讲 第17课 西晋的短暂统一和北方各族的内迁.docx
- 第15讲 第14课 沟通中外文明的“丝绸之路”.docx
- 第13课时 中东 欧洲西部.doc
- 第17讲 第16 课三国鼎立.docx
- 第17讲 第16课 三国鼎立 带解析.docx
- 2024_2025年新教材高中历史课时检测9近代西方的法律与教化含解析新人教版选择性必修1.doc
- 2024_2025学年高二数学下学期期末备考试卷文含解析.docx
- 山西版2024高考政治一轮复习第二单元生产劳动与经营第5课时企业与劳动者教案.docx
- 第16讲 第15课 两汉的科技和文化 带解析.docx
- 第13课 宋元时期的科技与中外交通.docx
文档评论(0)