标志C++ 中STL 类的简单介绍(三)

2014-11-24 07:33:40 · 作者: · 浏览: 3
顶端元素的引用

push(x):将元素压入栈(顶)

pop():弹出(删除)顶端元素

queue

1.queue的基本概念

queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口。queue允许新增元素、移除元素、从最底端加入元素、取得最顶端元素。但除了最底端可以加入、最顶端可以取出,没有任何其他方法可以存取queue的其他元素。换言之,queue不支持随机访问。

STL以deque作为queue的底层结构,对deque封闭其底端的出口和前端的入口,稍作修改便形成了queue。

2.容器适配器队列类std::queue成员函数

#include

queue实现先进先出的操作

std::queue que;

type为队列操作的数据类型

container为实现队列所用的容器类型,只能为提供了push_front操作的std::deque或std::list,默认基于std::deque

其成员函数如下:

front():返回队首元素的引用

back():返回队尾元素的引用

push(x):把元素x推入(插入)到队尾

pop():队首元素出列(弹出(删除)队首元素)

priority_queue

1.priority_queue的基本概念

priority_queue为优先级队列,它允许用户为队列中存储的元素设置优先级。这种队列不是直接将新元素放置在队列尾部,而是放置在比它优先级低的元素前面,即提供了一种插队策略。标准库默认使用<操作符来确定他们之间的优先级关系。即权重大的排在队首。

使用priority_queue时,包含 文件。

2.容器适配器队列类std::priority_queue成员函数

#include

priority_queue实现先进先出的操作

std::priority_queue pri_que;

type为队列操作的数据类型

container为实现队列所用的容器类型,可以为std::vector,std::deque,默认基于deque

comp为排队策略,默认为std::less<>,即插到小于它的元素前

例如std::priority_queue ,std::greater > IntPriQue;

其成员函数如下:

top():返回队首(优先级最高)元素的引用

push(x):将元素推入(按插队策略插排)队列(尾部)

pop():弹出(删除)队首(优先级最高)元素

关联式容器

所谓关联式容器,概念上类似关联式数据库(实际上则简单许多):每项数据(元素)包含一个键值(key)和一个实值(value)。当元素被插入到关联式容器中时,容器内部数据结构(可能是RB-tree,也可能是hash-table)便依照其键值大小,以某种特定规则将这个元素放置于适当位置。关联式容器没有所谓头尾(只有最大元素和最小元素),所以不会有push_back(),push_front(),pop_back(),pop_front(),begin(),end()这样的操作。

一般而言,关联式容器的内部结构是一个balanced binary tree(平衡二叉树),以便获得良好的搜索效率。balanced binary tree有很多种类型,包括AVL-tree、RB-tree、AA-tree,其中广泛运用于STL的是RB-tree(红黑树)。

标准的STL关联式容器分为set(集合)和map(映射类)两大类,以及这两大类的衍生体multiset(多键集合)和multimap(多键映射表)。这些容器的底层机制均以RB-tree完成(红黑树)。RB-tree也是一个独立容器,但并不开放给外界使用。

此外,SGI STL还提供了一个不在标准规格之列的关联式容器:hash table(散列表,哈希表),以及以此hash table为底层机制而完成的hash_set(散列集合)、hash_map(散列映射表)、hash_multiset(散列多键集合)、hash_multimap(散列多键映射表)。

map

关联式容器std::map成员函数

#include

map建立key-value映射

std::map mp;

std::map mp;

key为键值

value为映射值

comp可选,为键值对存放策略,例如可为std::less<>,键值映射对将按键值从小到大存储

其成员函数如下:

count():返回map中键值等于key的元素的个数

equal_range():函数返回两个迭代器――一个指向第一个键值为key的元素,另一个指向最后一个键值为key的元素

erase(i):删除迭代器所指位置的元素(键值对)

lower_bound():返回一个迭代器,指向map中键值>=key的第一个元素

upper_bound():函数返回一个迭代器,指向map中键值>key的第一个元素

find(key):返回键值为key的键值对迭代器,如果没有该映射则返回结束游标end()

注意map的[]操作符,当试图对于不存在的key进行引用时,将新建键值对,值为空。

通用算法(对以上STL均适用)

#include

1.非修正序列算法:

2.修正序列算法:

3.排序算法:

4.数值算法: