C++程序设计语言
该书主要介绍C++语言的基础以及如何利用它进行程序设计。学习任何一本语言如果只沉浸在语言本身特征,你的收获会比较小,关键是程序设计思想。里面提到的一句话很重要“对于程序语言设计和设计技术的理解远比细节的理解更重要,而这种理解的根本是时间和实践”。一般程序设计都会有三个过程:分析、设计、编码。一般程序员开始的时候花在分析和设计上的时间较少,开发之初就上手编程,容易照成后期维护修改比较困难,这种程序员一般用10%分析,20%设计,30%编码,40%找bug加维护;对于一个高级程序员来说会花40%分析,40%设计,20%编码加维护。
第二部分:标准库
标准库
- 标准容器
- vector
- list
- deque
- stack
- queue
- priority_queue
- map
- multimap
- set
- multiset
- 拟容器
- string
- valarray
- bitset
- 函数对象
- 重载了函数运算符(即())的对象称之为函数对象
- 谓词
- 返回值为bool类型的函数对象称之为谓词
- 适配器:提供对函数对象的变形
- 他们都以函数对象作为输入,返回另外的函数对象
- 算法
- 非修改性序列算法
- for_each
- find
- find_if
- count
- count_if
- equal
- mismatch
- search
- search_n
- find_end
- 修改性算法
- copy
- copy_backward
- transform
- unique
- unique_copy
- replace
- remove
- fill
- generator
- reverse
- roate
- random_shuffle
- swap
- 排序序列
- sort
- stable_sort
- partial_sort
- binary_search
- merge
- partition
- includes
- set_union
- set_intersection
- set_difference
- 堆
- push_heap
- pop_heap
- make_heap
- sort_heap
- 最大最小算法
- max
- min
- max_element
- min_element
- 非修改性序列算法
- 排列
- next_permutation
- prev_permutation
- 排列
迭代器和分配器
- 迭代器:提供一种数据访问方式,连接容器和算法的纽带,使得写算法的人不必关心多样的数据类型
- 分配器:提供一种映射,将低级的数组或者字节形式的数据模型映射到高级对象模型
- 迭代器类型
- 输出:out
- 输入:in
- 前向:for
- 双向:bi
- 随机:ran
- 插入器
- 反向迭代器
- 流迭代器
- 带检查的迭代器
- 分配器
- 将容易或者算法的实现隔离与物理存储之外,一个分离器提供了一套分配和释放存储的标准方式以及用作指针类型和引用类型的标准名字
- 标准分配器
- 用户自己定分配器
串
- string
流
数值
- 数值的限制
- 需要include <limits>
- numeric_limits<T>::min\max
- numeric_limits<double>::epsilon()
- 标准数学函数
- 向量算术
- valarray:设计目标 高效的利用计算机性能,目标高效
- 复数运算
- 通用数值算法
- accumulate
- inner_product
- partial_sum
- adjacent_difference
- 随机数
- srand:初始化种子
- rand:产生随机数
总结:STL的学习主要包括三个阶段,第一个阶段能够了解并且熟悉标准库;第二个阶段学会在适当的场景使用标准库;第三个阶段了解标注库的实现以及各类算法的复杂度。最后在此基础上对标准库进行扩展,后续将会对每一类标准库容器以及算法进行分析,学习标准库的设计思想。