STL
- 标准模板库 STL,常用的数据结构和算法的模板的集合
- 泛型程序设计
- 被插入容器中的元素是原对象的一个复制
容器
可容纳各种数据类型的通用数据结构,是类模板
顺序容器
- 顺序容器中元素插入位置与元素的值无关
vector
会提前多分配一些空间以备用- 适用于
vector
的操作都适用于deque
- 在两端增删元素
deque
(双向队列)性能较好 list
链表,不支持随机存取list
不支持 STL 的sort()
,自己有相应的成员函数- 定义类型不确定的迭代器,前面加
typename
typename list<T>::iterator i;
关联容器
- 元素是排序的,元素位置和其值相关
- 便于查找元素
- 通常以平衡二叉树的方式实现
pair
模板Pred
类型的变量定义了“一个比另一个小”的方法,缺省为less<Key>
less
模板的定义
自己定义的类需要给出比较大小的方式
friend bool operator < (const A& a1, const A& a2) {return a1.n < a2.n;}
set
即集合,无相同的元素map
存放的元素有且仅有两个成员变量,一个名为first
,另一个名为second
map
根据first
的值对元素排序,first
的值不可重复,根据first
来检索元素map
有[]
这个成员函数,multimap
没有
相关的成员函数
顺序容器和关联容器中都有的
顺序容器的常用成员函数
关联容器的常用成员函数
容器适配器
stack
栈,先进后出;可用vector、list、deque
实现,缺省情况用deque
实现template<class T, class Cont = deque<T> > class stack { .... };
queue
队列(单向),先进先出;可用list、deque
实现,缺省情况用deque
实现priority_queue
优先级队列,最高优先级的元素总是第一个出队;通常采用堆排序template <class T, class Container = vector<T>, class Compare = less<T> > class priority_queue { .... };
都有
empty()
、size()
函数,用于元素个数的判断
迭代器
用于存取容器中的元素,类似于指针
vector<int>::iterator i; for (i = v.begin(); i != v.end(); i++) cout << *i << endl; vector<int>::reverse_iterator r;//反向迭代器 for (r = v.rbegin(); r != v.rend(); r++) cout << *r << endl;
不同容器上的迭代器
有的算法如
sort()
需要随机访问迭代器来访问元素,有的容器不支持这些算法
算法
容器上的操作的函数模板
通过迭代器操纵元素
“相等”的概念
find()
举例
大多重载的算法有两个版本