了解容器

来源:互联网 发布:渠道管理 知乎 编辑:程序博客网 时间:2024/06/05 07:37

STL是标准的C++库,容器时其中的一个重要组成部分。在实现容器时主要提供了顺序容器和关联容器。STL为容器的遍历提供了迭代器。STL也提供了100多种算法的实现。这些算法包括排序,遍历等等。

什么是容器?

容器时容纳特定类型对象的集合,因此容器中的对象必须是统一的类型,而且该类型必须是可拷贝构造和赋值的,所以包括的类型有内置的基本数据类型和带有公用拷贝构造函数和赋值操作符的类。STL中提供的容器有vector,list,deque,set,multiset,map,multimap等。

在STL中,容器一般用模板类来实现。不过STL并没有采用面向对象的技术,所以在STL中并没有一个通用的容器类,各种具体的容器也没有统一的基类。

容器可以视为是数组的扩展,即对象的数组(广义数组),其中的元素(对象)通过容器对“[]”的重载,可以喝数组一样利用下标(索引)来访问。

在STL中提供了两种类型的容器:顺序容器和关联容器。这两种分类下面是各种具体的容器:

一:顺序容器,指的是将一组具有相同类型T的对象,以严格的线性形式组织在一起。顺序由容器可以是为数组和链表的推广。包括有以下三种顺序容器:。

a.vector<T>

b.deque<T>

c.list<T>

二:关联容器,提供一个key(键)实现对元素的随机访问,其特点是key是有序的,即元素是按预定义的键顺序插入的。关联容器具有从基于键的集合中快速提取对象的能力,其中集合的大小在运行时是可变的。关联容器可以视为关联数组,映射或字典的推广,他们保存的都是键值对,给定了其中的一个被称为键(key)的值,就可以快速访问与其对应的另一个值的值。STL中的额管理容器有以下四种。

a.set(Key)(集合):支持唯一键值,并提供对键本身的快速搜索;

b.multiset(Key)(多重集合):支持可重复键值,并提供对键本身的快速检索。

c.map(Key,T)支持唯一Key类型的键值, 并提供对另一个基于键的类型T的快速检索。

d.multimap(Key,T)(多重映射):支持可重复Key类型的键值,并提供对另一个基于键的类型T的快速检索。

三:除了这两种以外,还有一种容器是容器适配器。不过容器适配器不是独立的容器,只是某种容器的变种,他提供原容器的一个专用的受限借口。特别是,容器适配器和普通容器的不一样是在于不提供迭代器。在STL中有三种容器适配器,具体如下。

a.stack<T>(栈):只支持top()(读取栈顶元素),push()(在栈顶出加入新元素)和pop(取出栈顶元素)操作(先入后出)的一种序列容器。
b.queue<T>(队列):与stack相似,queue也是对序列容器的限制实现。与栈相比,队列也支持back()(读取队尾处的元素)和push_back()(在队尾处插入新的元素)操作,但是不再支持pop_back()(取出队尾处的元素)操作。不过,队列允许front()(读取队首处的元素)和pop_front()(取出队首处的元素)的操作(前出后入)。
c.priority_queue()<T>(优先队列):也是一种队列queue,不过其中的每个元素都被给定了一个优先级,用来控制元素达到队首top()的顺序。默认情况下优先队列简单的使用运算符 < 进行元素比较,top()返回最大的元素 。

注意:优先队列,并不要求其全部元素都是有序的,而只要求第一个元素是最大的。

0 0
原创粉丝点击