第五章标准模板库
程序员角度:STL = 群集类别 + 算法(群集类别上的算法)
5.1
容器(群集) |
容器(群集) |
算法 |
迭代器 |
迭代器
|
5.2顺序容器:
Vector:
Deque:
List:
关联容器:
Set/multiset:
Map/Multimap:
Vector:索引[]法,push_back(所有容器提供这个函数),size(所有容器提供这个函数)。易插入尾部元素。
Deque:和Vector类似。有push_front函数(Vector没有,因为Vector从前端插入费时)。易插入两端元素。
List:易插入中间元素。不提供[]索引访问。pop_front删除第一个元素但不返回。front函数返回第一个元素。
Strings:和Vector类似。
Array:没有size和empty函数。
关联容器的区别主要在元素的类型和处理重复元素上。
Set:自动排序,不允许重复。
Multiset:自动排序,允许重复。
Map:元素都是实值/键值形成的对组。不允许重复。
Multimap:允许重复。
所有关联容器都有一个template参数,指明排序准则,默认是operator <。所有关联容器有二叉树实现。用insert函数插入,而不是用push_back和push_front。
容器适配器:也是容器,Stack,Queue,Priority queue。
迭代器:面向对象的指针。有begin和end函数,end函数返回结束点的迭代器,即最后一个位置的后面的迭代器。
Map允许使用[]索引,只不过是关联式数组。
迭代器分五种类型。STL定义的容器的迭代器都属于下面两种双向迭代器(list,map/multimap,set/multiset);随机迭代器(包含双向迭代器的全部功能,Vector,deque,string)
5.4算法是搭配迭代器使用的全局函数。
min_element,max_element,sort,reverse(反转区间内的元素),find。
5.4.1算法处理的是半开区间[pos1,pos2,随机迭代器允许算术运算和关系运算。
5.4.2处理多个区间的元素,必须保证后面的区间够大。resize,copy。
5.5适配器:特殊的迭代器。
Insert iterator:back_inserter(container)front_inserter(container)inserter(container,pos)
Stream iterator:copy(istream_iterator<string>(cin),istream_iterator<string>(),back_inserter(coll));
*coll.end()和*coll.rend()都没有定义。
5.6可变序列算法:不能用于关联容器。