C++标准库——第一周课程笔记
来源:互联网 发布:搜狗电影网络电影 编辑:程序博客网 时间:2024/06/05 06:48
课程目标:
level 0:使用C++标准库
level 1:认识C++标准库
level 2:良好使用C++标准库
level 3:扩充C++标准库
本课程希望我们能够学会使用C++标准库的相关内容,并在了解标准库源代码的基础上,正确的使用其中的内容,提高程序的运行效率。
关于C++标准库的一些参考网站:
CPlusPlus.com
CppReference.com
gcc.gnu.org
第一周先介绍了C++标准库的组织形式,即六大部件以及其相关关系。然后重点介绍了容器的特性以及其使用方式。
一、六大部件介绍
• 容器 Container
• 分配器 Allocator
• 算法 Algorihm
• 迭代器 Iterator
• 配适器 Adopter
• 仿函数 Function
六大部件的关系如上图所示。容器负责实现数据结构,算法负责执行基本的算法函数,这两个是标准库的核心组件。迭代器是连接上述两个部件的桥梁,迭代器是指向容器内数据的智能指针,算法通过操作迭代器实现对容器内数据的便利和操作。分配器是一个底层部件,负责进行容器空间的分配以及程序内存空间的管理操作。仿函数和配适器在之前的课程中有所介绍,二者主要在标准库使用的便捷性和安全性中起作用。
以下为六大部件使用方法的基本示例
二、容器介绍
1.容器的迭代器
容器的迭代器可以看作是容器内元素的指针,在C++中,所有容器操作和算法都遵循前闭后开的原则进行,即首迭代器指向的是第一个元素,尾迭代器指向的是最后一个元素的下一个元素。C++中一共有5中迭代器,分别为只读迭代器、只写迭代器、单向迭代器、双向迭代器、随机迭代器。其中较为常见的是后三种迭代器,且这些迭代器能力依次增强。部分算法对迭代器的类型有一定的要求。
2.容器
上图显示了各个容器的逻辑结构,其特点如下:
• Array:前后都无法扩充,大小固定的容器,可使用随机迭代器
• Vector:可以在后端扩充的容器,可使用随机迭代器
• Deque:前后都可以扩充的容器,可使用随机迭代器
• List:双向循环链表,插入、删除元素效率较高,可使用双向迭代器
• Forward-List:单向循环链表,插入、删除元素效率较高,可使用单向迭代器
• Set/Multiset:底层采用红黑树结构的集合类,元素查找效率非常高。
• Map/Multimap:底层采用红黑树结构的键值对类,根据键查找值的效率非常高。
• Unordered Set/Multiset:底层采用哈希表结构的集合类,元素查找效率非常高。
• Unordered Map/Multimap:底层采用哈希表结构的键值对类,根据键查找值的效率非常高。
3.分配器
每个容器都有两个模板参数,一个是容器数据类型参数,一个是容器内存分配器参数。第二个参数是有默认值的参数,因此,一般情况下不需要填写,当你希望改变内存分配方式时,可以填写该参数。
- C++标准库——第一周课程笔记
- 吴恩达机器学习课程笔记——第一周
- 【博览网】设计模式——第一周课程笔记
- 【GeekBand】第一周课程笔记
- 极客班C++(上)第一周课程笔记
- 【博览网】C++标准库——第四周课程笔记
- 极客班C++设计模式第一周课程笔记——常用模式(1)
- 【博览网】面向对象高级编程(上)——第一周课程笔记
- 【博览网】面向对象编程下——第一周课程笔记
- Boolan IOS课程第一周 笔记
- Boolan* C++课程第一周笔记
- 【吴恩达】机器学习课程第一周笔记
- Android笔记—第一周
- 作业——在线学习Android课程之第一周
- 第一周课程
- Coursera Machine Learning 课程笔记之第一周:Introduction
- C++开发工程师课程第一周笔记 GeekBank
- Boolan博览网C++开发课程第一周笔记
- SUSE linux手动添加更新源
- oracle 在个人电脑安装成功,第二天orcl的oem无法登陆
- 乌云沙龙:赛棍的自我修养
- EditText获取焦点 失去焦点监听,获取焦点操作
- 响应式Web中,避免不必要的图片加载
- C++标准库——第一周课程笔记
- 【1】ping 命令
- 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(二)
- web前端工程师----JavaScript语言
- Struts2标签库概述
- spack程序开发
- XML解析
- Ubuntu 13.04设置root用户登录图形界面
- strstr函数和strchr函数