- 容器:管理某类对象的集合
- 迭代器:在一个对象集群的元素进行遍历,为所有的容器提供一组很小的公共接口,与指针类似,以operator++累进,以operator*提所指值
- 算法:处理集群内的元素
STL的一个根本特性:所有组件都可以针对任意types运作。
序列式容器
可序群集,有vector, deque, list- vector:将元素置于dynamic array中管理,允许随机存取
- deques(double-ended-queue):一个dynamic array,可以向两端发展,不论在尾部还是头部安插元素都很迅速,在中间部分,要移动元素。
int main() { deque<float> coll; for(int i=1;i<=6;i++) { coll.push_front(i*1.1); } for(int i=0;i<coll.size();i++) cout<<coll[i]<<' '; cout<<endl; }
- list:双向链表,list的每个元素都以一部分内存指示其前驱元素和后继元素。存取动作花费线性时间,但是安插或删除动作迅速。
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<char> coll;
for(char c='a';c<='z';c++)
coll.push_back(c);
while(!coll.empty())
{
cout<<coll.front()<<' ';
coll.pop_front();
}
cout<<endl;
}
- string: 也可当作STL容器,与vector类似,只是元素是字符
- array: 长度固定的数组,作为初始化行时很有用
#include <array>
...
using namespace std;
array<int,5> ai;//产生一个有5个int的数组
array<double,4> ad={1.2,2.1,3.43,4.3};
array<double,4> a;
a=ad;//valid for array objects of same size;
说明:在C++11中,可将列表初始化用于vector和array对象,在C++98中,不能对vector对象这样做。
关联式容器
关联式容器依据特定的排序规则,自动为其元素排序,缺省情况下,以operator <进行比较。也可以提供自己的比较函数,定义出不同的排序规则。- set: set的内部元素依据其值自动排序,每个元素值只出现一次
- multiset: 和set相同,允许重复元素
- map: 元素是“实值/键值”所组成的一个对组,根据键排序,每一个键只能出现一次
- multimap: 与map相同,允许重复元素
- 容器配接器
- stack: LIFO
- queue: FIFO
- priority queue: 每个元素拥有不同的优先权,排序规则(缺省使用operator <),下一个元素永远是优先级最高的元素。