第16章 string类和标准模板库
1. string类 由头文件string支持 String.h(C)和cstring(C++)支持C库字符串函数,但不支持string类
1.1 构造字符串
1.2 string类输入 两种方式 Getline()函数从输入读取字符,直到 区别C版本getline() 到达文件尾 遇到分界字符 读取字符数达到最大允许值
1.3 使用字符串 比较字符串 确定字符串长度 搜索给定子字符串或字符 Find_last_not_of() <, <=, ==, >, >=, != 确定字符串长度 Size(), length() 搜索给定子字符串或字符 Find(), rfind(), find_first_of(), find_first_not_of() Find_last_not_of()
1.4 string还提供了哪些功能 …… 删除字符串的部分或全部内容 字符串取代 数据插入或删除 字符串内容比较 提取子字符串 字符串内容复制 交换字符串内容 ……
1.5 字符串种类 String库基于模板类 可使用Wchar_t、char16_t、char32_t、char类型字符串,也可开发相关类
2. 智能指针模板类 行为类似于指针的类对象 可帮助管理动态内存分配 Auto_ptr Unique_ptr Shared_ptr
2.1 使用智能指针 头文件memory 常规指针和智能指针的区别
2.2 有关智能指针的注意事项 有时不适合使用auto_ptr,可以用shared_ptr代替
2.3 unique_ptr为何优于auto_ptr 程序在编译环节就会出错,而不会在运行时 #6编译报错
2.4 选择智能指针 多个指针指向同一对象:shared_ptr 不需要多指针指向同一对象;使用new分配内存,返回指针:unique_ptr
3. 标准模板库 STL提供一组表示容器、迭代器、函数对象和算法的模板 STL容器同质 STL不是面向对象,而是泛型编程
3.1 模板类vector
3.2 可对矢量执行的操作 Size(), Swap(), Begin(), End(), erase(), insert(), push_back()…… 迭代器——广义指针
3.3 对矢量可执行的其他操作 STL从更广泛的角度定义非成员函数执行相关操作,节省大量重复工作 For_each(), random_shuffer(), sort()
3.4 基于范围的for循环
4. 泛型编程 泛型编程关注算法,旨在编写独立于数据类型的代码 与面向对象编程的共同点是抽象和可重用,但理念不同 模板使算法独立于存储的数据类型
4.1 为何使用迭代器 迭代器使算法独立于使用的容器类型,是遍历容器中的值的通用表示 迭代器特征 对*p进行定义 对p=q进行定义
4.2 迭代器类型 输入迭代器 输出迭代器 正向迭代器 双向迭代器 随机访问迭代器
4.3 迭代器层次结构 功能上 输出迭代器 正向迭代器 输入迭代器 随机访问迭代器 双向选择器 正向迭代器 正向迭代器
4.4 概念、改进和模型 迭代器是要求,而非类型,STL算法可以使用任何满足其要求的迭代器实现 概念用来描述一系列要求 概念可以具有类似继承的关系,用改进来表示概念上的继承 概念的具体实现被称为模型
4.5 容器种类 概念是具有名称的通用类别,容器概念指定了一系列必须满足的要求 容器类型是创建具体容器对象的模板 Vector,deque, list, queue,priority_queue,stack
4.4 关联容器 关联容器是对容器概念的另一种改进 4种关联容器:set,multiset,map,multimap 与键关联,用键查找 对元素快速访问 允许插入,但不能指定位置 用树实现 4种关联容器:set,multiset,map,multimap
4.5 无序关联容器 无序关联容器是对容器概念的另一种改进 基于哈希表(提高添加、删除和查找效率) 4种无序关联容器:unordered_set,unordered_mutiset ,unorderd_map ,unordered_multimap
16.5 函数对象 函数对象——函数符,是以函数方式与()结合使用的任意对象 重载了()运算符
5.1 函数符概念 STL定义了函数符概念 生成器,不用参数调用 一元函数,用一个参数调用 二元函数,用两个参数调用
5.2 预定义的函数符 STL定义了多个基本函数符,为支持将函数作为参数的STL函数
5.3 自适应函数符和函数适配器 函数符自适应:携带标识参数类型和返回类型的typedef成员
6. 算法 使用模板提供泛型,使用迭代器提供访问容器的通用表示 统一容器设计使不同类型容器具有明显关系
6.1 算法组 非修改式序列操作 修改式序列操作 排序和相关操作 通用数字运算
6.2 算法的通用特征 STL函数使用迭代器和迭代器区间 根据结果放置位置,就地算法(sort函数)和复制算法(copy函数) 根据结果执行操作的函数版本,通常以_if结尾
6.3 stl和string类 String类不是STL组成部分,但考虑到了STL 包含Begin(), end(), rbegin(), rend(),可以使用STL接口
6.4 函数和容器方法 通常选择STL方法优于STL函数 更适合特定容器 更好的内存管理
6.5 使用stl STL是一个库,组成部分协同工作 STL组件是工具,创建其他工具的基本部件
7. 其他库 C++提供了其他一些更为专用的类库 Complex,valarray
7.1 vector、valarray和array Valarray是面向数值计算的,不是STL的一部分 Array表示长度固定的数组,为代替内置数组设置
7.2 模板initializer_list
7.3 使用initializer_list
8. 总结