初步STL该容器适配器
容器适配器
特点
容器一定的顺序来实现(让现有的以集装箱堆放/式工作)
分类
1) stack: 头文件 <stack>
• 栈 -- 后进先出
2) queue: 头文件 <queue>
• 队列 -- 先进先出
3) priority_queue: 头文件 <queue>
• 优先级队列 -- 最高优先级元素总是第一个出列
注:
容器适配器上没有迭代器
STL中各种排序, 查找, 变序等算法都不适合容器适配器
Stack
特点
1.stack 是后进先出的数据结构
2.仅仅能插入, 删除, 訪问栈顶的元素
3.可用 vector, list, deque来实现
• 缺省情况下, 用deque实现
• 用 vector和deque实现, 比用list实现性能好
template<class T, class Cont = deque<T> > //第一个为stack数据的类型 第二个为实现的容器 默觉得deque
class stack {
…
};
成员函数
构造函数
stack <int> stde1; //默认用deque实现 stack <int, deque<int> > stde2; stack <int, vector<int> > stvc; stack <int, list<int> > stli;
訪问元素的操作和类型
|
size_type |
容器元素的个数(无符号整型) |
|
value_type |
容器中元素的类型 |
|
empty() |
推断栈是否为空,假设是在返回true。 |
|
pop() |
移除栈顶元素 |
|
push() |
往栈顶加入元素 |
|
size() |
返回栈元素的个数 |
|
top() |
返回栈顶元素的引用 |
举例
#include "stdafx.h"
#include <vector>
#include <list>
#include <deque>
#include <stack>
#include <iostream>
using namespace std; int main()
{
stack<int> dest1;
stack<int,deque<int>> dest2;
stack<int,vector<int>> vest;
stack<int,list<int>> list;
stack<int>::size_type m;
stack<int>::value_type n; dest1.push(5);
dest1.push(50);
dest1.push(500); cout<<"dest1的元素个数是 :";
m=dest1.size();
cout<<m;
cout<<"\n"; //3 cout<<"dest1的栈顶元素是 :";
n=dest1.top();
cout<<n;
cout<<"\n"; //500 dest1.pop();
cout<<"运行pop后,dest1的栈顶元素是 :";
cout<<dest1.top(); //50
getchar();
return 0;
}
queue
特点
1.能够用 list和deque实现,缺省情况下用deque实现。它存储的容器对象为它来实现全部的功能。
2.它仅仅同意在表的前端(front)进行删除操作。而在表的后端(back)进行插入操作。
3.先进先出,最先插入的元素将是最先被删除;反之最后插入的元素将最后被删除。
template<class T, class Cont = deque<T> >
class queue {
……
};
成员函数
构造函数
queue <int> quede1; queue <int, deque<int> > quede2; queue <int, list<int> > queli;
訪问queue中的元素
|
size_type |
容器元素的个数(无符号整型) |
|
value_type |
容器中元素的类型 |
|
empty() |
推断队列是否为空 |
|
size() |
返回队列元素的个数 |
|
pop() |
移除队列顶元素 |
|
push() |
往队列尾加入元素 |
|
front() |
返回队列顶元素的引用 |
|
back() |
返回近期插入的队列尾元素 |
举例:
#include "stdafx.h"
#include <list>
#include <deque>
#include <queue>
#include <iostream>
using namespace std; int main( )
{
queue<int> que1;
queue<int,deque<int>> que2;
queue<int,list<int>> que3; que1.push(5);
que1.push(9);
que1.push(20);
que1.push(200); cout<<"队列que1含有元素的数量是: ";
cout<<que1.size(); //4
cout<<"\n";
cout<<"队列的front元素是 :";
cout<<que1.front(); //5
cout<<"\n";
cout<<"队列的back元素是 :";
cout<<que1.back(); //200
cout<<"\n";
que1.pop(); cout<<"运行后pop,队列que1含有元素的数量是: ";
cout<<que1.size(); //3
cout<<"\n";
cout<<"运行后pop,队列的front元素是 :";
cout<<que1.front(); //9
cout<<"\n";
cout<<"运行后pop,队列的back元素是 :";
cout<<que1.back(); //200
cout<<"\n"; getchar();
return 0;
}
priority_queue
特点:
priority_dueue也限制了被控序列的存取,但它还有着一些额外的要求。它实质上也是一个队列,只是这个队列以一
个谓词来检測它里面哪个元素拥有最高的优先级。该模板类能够确保每次通过top。从它里面所取得的元素都是剩下
元素中优先级最高的那个。
为了做到这一点,在每次通过push向它里面增加元素时,它所控制的整个序列都会在必要
时被重排。更确切的讲,它把被控序列当做一个堆来维护。使用了一些算法。
1.能够用vector和deque实现,缺省情况下用vector实现
2.priority_queue 通经常使用堆排序技术实现, 保证最大的元素总是在最前面
• 运行pop操作时, 删除的是最大的元素
• 运行top操作时, 返回的是最大元素的引用
3.默认的元素比較器是 less<T>
成员函数
构造函数
priority_queue <int> q1; priority_queue <int, deque <int> > q2; priority_queue <int, vector<int>, greater<int> > q3; //great<int>就是上面说的谓词 priority_queue <int> q4( q1 ); priority_queue <int, vector<int>, greater<int> > q6( v5.begin( ), v5.begin( ) + 2 );
訪问priority queue中的元素
|
size_type |
容器元素的个数(无符号整型) |
|
value_type |
容器中元素的类型 |
|
empty() |
推断优先队列是否为空,假设是在返回true。 |
|
pop() |
从优先队列顶移除最大的元素 |
|
push() |
往优先队列加入元素 |
|
size() |
返回优先队列元素的个数 |
|
top() |
返回优先队列顶最大元素的常引用 |
举例:
#include "stdafx.h"
#include <vector>
#include <list>
#include <deque>
#include <queue>
#include <iostream>
using namespace std; int main()
{ priority_queue<int> q1;
q1.push(5);
q1.push(50);
q1.push(2);
q1.push(110); cout<<"优先队列q1中元素的数量 :";
cout<<q1.size();
cout<<"\n"; //4 cout<<"优先队列顶元素是 :";
cout<<q1.top();
cout<<"\n"; //110 q1.pop();
cout<<"运行pop后。优先队列顶元素是 :";
cout<<q1.top(); //50
getchar();
return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
初步STL该容器适配器的更多相关文章
- STL之容器适配器queue的实现框架
说明:本文仅供学习交流,转载请标明出处,欢迎转载! 上篇文章STL之容器适配器stack的实现框架已经介绍了STL是怎样借助基础容器实现一种经常使用的数据结构stack (栈),本文介绍下第二种STL ...
- STL之容器适配器stack的实现框架
说明:本文仅供学习交流,转载请标明出处,欢迎转载! 一提到适配器(adapter).我们就想到了早期用电话线上网所用的调制解调器,俗称"猫"."猫"的作用是实现 ...
- STL之容器适配器priority_queue
priority_queue(优先队列)是一个拥有权值观念的queue,它允许加入新元素,删除旧元素,审视元素值等功能.由于这是一个queue,所以只允许在底端加入元素,并从顶端取出元素, 除此之外别 ...
- STL标准库-容器适配器
技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 上一节介绍了仿函数适配器,这节主要介绍容器适配器和迭代器适配器的概念,其实容器适配器和迭代器其适配器就是封装了一些其他class ...
- c++ STL容器适配器
一.标准库顺序容器适配器的种类 标准库提供了三种顺序容器适配器:queue(FIFO队列).priority_queue(优先级队列).stack(栈) 二.什么是容器适配器 &q ...
- STL中容器的push()或者push_back()函数的一点说明
在STL的queue 或者 vector.list等容器适配器或者容器中,会经常用到的函数就是push()或者push_back()函数,但是有一点需要明确的是: 在使用这些函数对容器/适配器对象增加 ...
- STL之容器(1)
STL容器类的模板 容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和 ...
- STL之容器基本操作
容器类 STL Container Header Applications vector <vector> 直接访问任意元素,快速插入.删除尾部元素 deque <deque> ...
- c++ 顺序容器学习 - 容器适配器
摘要: 对 容器适配器 的疑问. 刚开始接触 容器适配器 时,总感觉怪怪的,认为多此一举,顺手搜了搜,原来我在这一点is not alone: STL容器适配器的用途 其中有个老兄说的好,这里 引用一 ...
随机推荐
- (一一六)新浪微博client的离线缓存实现思路
上一节(一一五)利用NSKeyedArchiver实现随意对象转为二进制介绍了将随意对象转化为二进制数据和还原的方法.可用于实现本节介绍的微博数据离线缓存. 通过新浪官方的API能够发现,返回的微博数 ...
- php实现 句子逆序(需求才是最好的老师)
php实现 句子逆序(需求才是最好的老师) 一.总结 一句话总结:需求才是最好的老师. 1.str_split()和explode()的区别? explode — 使用一个字符串分割另一个字符串 3 ...
- Android 带文字的图片分享
这里也记录下上下文,因为做了一个失物招领的App,当有人上交了失物之后,可以将这个消息分享出去,这个消息内容有物品的信息和图片,而微信SDK始终无法做到,就想着把物品信息嵌入到图片中分享出去,先放一个 ...
- php汉字字符串长度和截取
mb_strlen("你好123",'utf-8');//返回5 strlen("你好");//返回几我也不知道,肯定不是2,但你想要2就用上面的 substr ...
- Rational Rose2007无法正常启动解决方式
安装完Rational Rose发现无法正常启动,我遇到了下面两个问题,希望能帮到同样经历的同学. 问题一: 安装完Rational Rose后不能用,提演示样例如以下:无法启动此程序,由于计算机中丢 ...
- Surf算法特征点检测与匹配
Speeded Up Robust Features(SURF,加速稳健特征),是一种稳健的局部特征点检测和描述算法.最初由Herbert Bay发表在2006年的欧洲计算机视觉国际会议(Europe ...
- CSDN code使用教程之git使用方法具体解释
首先须要下载GITclient.http://git-scm.com/downloads. . . 然后再code.csdn.net上面创建一个项目,假设 你的项目已经存在.那么请建立项目 ...
- SpringMVC3,使用RequestMappint的Param参数,实现一个url绑定多个方法
SpringMVC中,默认不能把多个相同的url绑定到同一个方法.如果需要绑定,需要增加param参数,而且值要不同. 我自己没有这个需求,或者就是有需求,我也想到的是使用不同的url. 项目中有少部 ...
- [React] displayName for stateless component
We can use 'displayName' on component to change its component tag in dev tool: import React from 're ...
- js进阶 9-16 如何实现多选框全选和取消
js进阶 9-16 如何实现多选框全选和取消 一.总结 一句话总结:选择取到每一个checkbox的值,然后赋值为true或者false就好. 1.如何实现多选框全选和取消? 选择取到每一个check ...