模板优缺点 口函数模板方法克服了C语言解决上述问题时用 大量不同函数名表示相似功能的坏习惯 口克服了宏定义不能进行参数类型检查的弊端 口克服了C++函数重载用相同函数名字重写几个 函数的繁琐 口缺点,调试比较困难 ■一般先写一个特殊版本的函数 运行正确后,改成模板函数 11
模板优缺点 函数模板方法克服了C语言解决上述问题时用 大量不同函数名表示相似功能的坏习惯 克服了宏定义不能进行参数类型检查的弊端 克服了C++函数重载用相同函数名字重写几个 函数的繁琐 缺点,调试比较困难 ◼ 一般先写一个特殊版本的函数 ◼ 运行正确后,改成模板函数 11
STL中的几个基本概念 口容器:可容纳各种数据类型的数据结构。 口迭代器:可依次存取容器中元素的东西 口算法:用来操作容器中的元素的函数模板。例如,STL 用ort)来对一个 vector中的数据进行排序,用fnd)来搜 索一个it中的对象。 函数本身与他们操作的数据的结构和类型无关,因此他们可以 在从简单数组到高度复杂容器的任何数据结构上使用。 口比如,数组 int array100就是个容器,而int*类型的指 针变量就可以作为迭代器,可以为这个容器编写一个排 序的算法
STL中的几个基本概念 容器:可容纳各种数据类型的数据结构。 迭代器:可依次存取容器中元素的东西 算法:用来操作容器中的元素的函数模板。例如,STL 用sort()来对一个vector中的数据进行排序,用find()来搜 索一个list中的对象。 ◼ 函数本身与他们操作的数据的结构和类型无关,因此他们可以 在从简单数组到高度复杂容器的任何数据结构上使用。 比如,数组int array[100]就是个容器,而 int * 类型的指 针变量就可以作为迭代器,可以为这个容器编写一个排 序的算法
容器概述 口可以用于存放各种类型的数据(基本类型的变量,对象等)的数 据结构。 口容器分为三大类: 1)顺序容器 vector:后部插入/删除,直接访问 deque:前/后部插入删除,直接访问 ist:双向链表,任意位置插入删除 2)关联容器 set:快速查找,无重复元素 multiset:快速查找,可有重复元素 map:一对一映射,无重复元素,基于关键字查找 multimap:一对一映射,可有重复元素,基于关键字查找 前2者合称为第一类容器 3)容器适配器 stack: LIFO queue: FIFO priority_ queue:优先级高的元素先出
容器概述 可以用于存放各种类型的数据(基本类型的变量,对象等)的数 据结构。 容器分为三大类: 1) 顺序容器 vector:后部插入/删除,直接访问 deque:前/后部插入/删除,直接访问 list:双向链表,任意位置插入/删除 2)关联容器 set:快速查找,无重复元素 multiset :快速查找,可有重复元素 map:一对一映射,无重复元素,基于关键字查找 multimap :一对一映射,可有重复元素,基于关键字查找 前2者合称为第一类容器 3)容器适配器 stack:LIFO queue:FIFO priority_queue:优先级高的元素先出
容器概述 口对象被插入容器中时,被插入的是对象的一个 复制品。 口许多算法,比如排序,查找,要求对容器中的 元素进行比较,所以,放入容器的对象所属的 类,还应该实现=和<运算符
容器概述 对象被插入容器中时,被插入的是对象的一个 复制品。 许多算法,比如排序,查找,要求对容器中的 元素进行比较,所以,放入容器的对象所属的 类,还应该实现 == 和 < 运算符
顺序容器简介 l) vector头文件< vector> 实际上就是个动态数组。随机存取任何元素都能在常数 时间完成。在尾端增删元素具有较佳的性能。 2) deque头文件< deque> 也是个动态数组,随机存取任何元素都能在常数时间完 成(但性能次于 vector)。在两端增删元素具有较佳的性 能。 3)lit头文件<ist> 双向链表,在任何位置增删元素都能在常数时间完成。 不支持随机存取。 上述三种容器称为顺序容器,是因为元素的插入位置同 元素的值无关
顺序容器简介 1) vector 头文件 <vector> 实际上就是个动态数组。随机存取任何元素都能在常数 时间完成。在尾端增删元素具有较佳的性能。 2) deque 头文件 <deque> 也是个动态数组,随机存取任何元素都能在常数时间完 成(但性能次于vector)。在两端增删元素具有较佳的性 能。 3) list 头文件 <list> 双向链表,在任何位置增删元素都能在常数时间完成。 不支持随机存取。 上述三种容器称为顺序容器,是因为元素的插入位置同 元素的值无关