一、模板的技巧
- typename可以用class替代
- 不能直接使用模板父类中的成员,需要:
类名<T>::函数名
- 在类模板中可以定义虚函数(多态),但虚函数不能是模板函数
二、STL介绍
-
STL标准模板库,由惠普实验室提供,里面集成了常用的数据结构类模板和算法函数模板等
- 容器:用来存储各类型数据的数据结构
- List:双端链表容器
- vector:向量容器,俗称数组
- stack、queue:栈和队列
- deque:双端队列,用法和向量基本一致,但可以在头和尾快速插入和删除
- set:集合容器,集合中的数据会自动排序,不能重复
- map:是一种关联容器,在其他编程语言叫做字典,C++中叫映射,以key/value/键值的方式进行储存,key的值不能重复
- multimap:多重映射,它与map很像,区别是它的key值可以重复
- multiset:多重集合,它与set很像,区别是它的key值可以重复
- priority_queue:优先队列,他会根据元素的比较结果进行排序
- 迭代器:类似于专门用来指向容器成员的指针,用来遍历、操作、管理容器中的成员,可以大大提高容器的访问速度
- iterator:用于指向容器汇总的元素
- begin():获取指向第一个元素的迭代器
- end():获取指向最后一个元素的下一个位置迭代器
- iterator:用于指向容器汇总的元素
- 算法:STL实现了常见的排序、查找算法
- STL常用的算法:
- 使用时需要加头文件:algorithm
- 查找:find、search
- 排序:sort
- 复制:copy
- 删除:remove
- 比较:equal
- STL常用的算法:
- 容器:用来存储各类型数据的数据结构
-
总结:
- vector和deque是支持[]运算,因此基本不需要迭代器,其他容器一律使用迭代器进行遍历
- stack、queue、priority_queue容器没有迭代器
- set、multiset、priority_queue会对元素进行排序,因它存储元素要支持比较运算符