STL 的主要组成部分是:容器,迭代器和算法
STL容器是类
迭代器用来遍历容器中的每个元素
算法用来操作容器中的元素
容器的主要种类有顺序容器、关联容器和容器适配器
三种预定义的顺序容器是向量,队列和表
向量容器使用动态数组存储和管理数据
由于数组是一种随机访问的数据结构,所以向量中的元素可以随机访问
实现向量容器的类是vector
在向量容器中插入元素使用的操作是insert和push_back
从向量容器中删除元素的操作是pop_back,erase,clear
可以使用typedef iterator 声明一个向量容器的迭代器,其为vector 类的public 成员
在所有容器上都有的成员函数是默认构造函数,带参构造函数,拷贝构造函数,析构函数,empty,size,max_size,swap,begin,end,rbegin,rend,insert,erase,clear和关系运算函数
函数begin返回一个指向容器中第一个元素的迭代器
函数end 返回一个指向容器中最后一个元素的迭代器
除了容器所具有公共函数外,顺序容器还具有的成员函数是:insert,push_back,pop_back,erase,clear,resize
算法copy用来将指定区间中的元素拷贝到另外一个区间上
如果在函数copy中使用ostream迭代器,可以输出容器中的元素
创建了一个ostream迭代器,也即指定了该迭代器输出的元素类型
双端队列容器使用动态数组实现,可以在该动态数组的两端插入元素
双端队列的两端都可以扩展
实现双端队列的类是deque
双端队列的特有操作:assign,push_front,pop_front,at,数组下标运算符[],front,back
表容器使用双向链表实现。因此,表中的每个元素(第一个元素和最后一个元素外)都含有指向器直接前驱和直接后继的指针
实现表的类是list
表的特有操作:assign,push_front,pop_front,front,back,remove,remove_if,unique,splice,sort,merge,reverse
5种迭代器:输入迭代器,输出迭代器,前向迭代器,双向迭代器,随机访问迭代器
输入迭代器用来冲一个输入流输入数据
输出迭代器用来把数据输出到一个输出流
前向迭代器可以引用同一集合中的同一元素,并且可以处理同一元素多次
双向迭代器即是前向迭代器,有可以向后遍历元素
双向迭代器可以在list,set,multiset,map,multimap类型的容器上使用
随机访问迭代器是可以随机访问容器中元素的双向迭代器
随机访问迭代器可以在 vector,dequeue,string和数组类型的容器上使用
关联容器中的元素自动按照某种排序准测存储。默认的排序准测是 小于(<)
在STL中预定义的关联容器是set,multiset,map,multimap
set类型的容器不允许有重复元素
multiset允许有重复元素
定义集合容器的类是set
定义多重集合容器的类是multiset
包含集合类和多重集合类第一及操作的头文件时set
操作insert,erase,clear可以用来在集合中插入和删除元素
大多数类属算法包含在algorithm中
STL中算法主要有4类: 非修改型,修改型,数字型,堆
非修改算法,不修改容器中的元素
修改算法通过重新排列,删除以及改变元素的值来修改容器中的元素
只改变元素的顺序,而不改变元素的值的修改算法,称为变异算法
数字算法用来对容器中元素执行数字计算
函数对象是一种类模板,它重载了函数调用运算符operator()
预定义的算术函数对象是plus,minus,multiplies,divides,modulus和negate
预定义的关系函数对象是equal_to,not_equal_to,greater,greater_equal,less,less_equal
预定义的逻辑函数对象是logical_not,logical_and,logical_or
谓词是特殊类型的函数对象,他返回布尔类型的值
一元谓词在单个参数上检查某种特性;二元谓词在两个参数上检查某种特性
谓词通常用来指定查找或排序准测
在STL中,谓词总是为相同的值返回相同的结果
修改内部状态的函数不是谓词
STL提供了三种插入迭代器:back_inserter,front_inserter,inserter用来在目标中插入元素
back_inserter使用容器的push_back 操作替换赋值运算符
front_inserter使用容器的push_front操作替换赋值运算符
由于向量类不支持push_front操作,所以上面迭代器不能用于向量容器
inserter迭代器使用容器的 insert操作代替赋值运算符