(一)关于本书
1、一些简介。C++最强大之处在于泛型编程,OO只是一个亮点。要做OOP请去Java\C#。
(二)标准库介绍
1、C++的特性,很多书都有介绍,略看
2、算法复杂度,请看《算法导论》
(三)一般概念
1、重点是明白异常处理的重要性,这是为什么要用标准库的一大原因。
(四)通用工具
1、Pairs(对组)是很简单的东西,可以自己做一个。以后的重点是Tuple(元组),可以关注一下boost::tuple。
2、auto_ptr可以不看,这个很难用。重点是了解引用计数。请关注std::tr1::shared_ptr或者boost::shared_ptr。这些特性在C++11中均内置为标准。
3、数值极限,可以帮助了解跨平台的基本数据类型。例如求int的最大:#include <limits> int intMax = std::numeric_limits<int>::max();
4、辅助函数,基本上用的很多。注意min、max和swap的用法。
(五)STL简介
1、基本上是大概。如果想速成的话直接看这一章就够了。
2、容器掌握:
类型 |
分类 |
特征 |
用处 |
vector |
序列容器 |
可变长的数组,内存是连续的。只能在尾部添加元素。内部元素改动消耗很大 |
如果没有特殊考虑,直接就用vector。不适合大数据,大数据请用数组,然后封装 |
list |
序列容器 |
双向链表,内部元素改动容易,添加元素麻烦。 |
链表。适用于需要大量的修改、排序或者广义表的情况。 |
deque |
序列容器 |
拥有vector的特性,同时可以在头部添加元素。内存不连续。内部元素修改很麻烦。 |
头尾增加元素的情况。 |
string |
序列容器 |
封装好的字符串 |
如果不注重计算速度和程序体积,就用它,安全方便。 |
array |
序列容器 |
对固定数组的封装 |
想用就用 |
set |
关联容器 |
重复的元素只看做一个元素。内部用排序,速度慢。 |
查看有哪些元素比较方便。 |
map |
关联容器 |
对数据对进行存储,类似python的词典 |
类似字典查询的地方 |
multiset |
关联容器 |
允许多个重复元素 |
查询出现次数 |
multimap |
关联容器 |
多个键值相同的元素 |
集合运算 |
stack |
配接器 |
后进先出 |
堆栈 |
queue |
配接器 |
先进先出 |
队列 |
Priority Queue |
配接器 |
优先等级分布 |
贪心算法 |
3、迭代器是用来遍历容器的。详见第七章。主要掌握下面的重载操作:
a) operate *
b) operate ++
c) operate == !=
d) operate =
迭代器隶属 |
类型 |
注意 |
vector |
随机 |
前后都可,随意变化位置 |
list |
双向 |
前后,一次一步 |
deque |
随机 |
同vector |
set、multiset |
双向 |
单步 |
map、multimap |
双向 |
单步 |
4、算法。详细见第九章。采用半开区间,begin是包含,end不包含。
5、特殊迭代器,也称迭代器配接器。主要有:
a) 插入迭代器,如inserter
b) 流迭代器,如ostream_iterator
c) 逆向迭代器,如reverse_iterator
6、函数可以作为参数传入STL算法,类似于函数指针。充分说明了函数也可以成为对象。一般只能传入一元和二元操作函数。
7、仿函数,用结构体或者类,重载了operator()后的一类具有函数行为的对象。详见第八章。仿函数速度比函数快、能存储状态。STL在<functional>里已经定义了很多仿函数,而且都可以使用bind。