容器适配器是用来扩展7中基本容器的,是修改和调整其他类接口的类。他们不提供存放数据的实际数据结构的实现方法,而且容器适配器也不支持迭代器。

1、标准栈容器

使用STL中的标准栈为程序员提供了一层附加的保护,下溢和上溢的情况在发生之间就会被捕获。

标准栈容器是使用适配器与一种基础容器相结合来实现的。使用适配器类,必须要包含他们的头文件,栈是<stack>中声明的。适配器在声明时必须传递参数,指明栈元素的类型及适配器将与那种基础容器向结合。

容器适配器的参数是某种顺序容器。

例如:

stack<int,deque<int>> myStack;

声明了基础容器为deque,元素类型为int的栈对象myStack;

基础容器提供栈的存储实现,而栈适配器提供特殊的操作功能。基础容器可以用任何顺序容器vector、list或deque实现,默认情况下以容器deque实现。

例子1:应用标准库中的deque顺序容器生成一个整数栈stack。

#include<iostream>
#include<stack>
using namespace std;
template<class T>
void popElements(T &s);
int main()
{
 stack<int> intDequeStack;//默认情况下以deque容器作为基础数据结构
 for (int i = 0; i < 10; i++)
  intDequeStack.push(i);//用push函数将整数添加到deque容器stack顶部
 cout << "Popping from intDequeStack:";
 popElements(intDequeStack);//将stack中的元素弹出并输出
 getchar();
 getchar();
 cout << endl;
}
template <class T>
void popElements(T &s)  //定义模板函数
{
 while (!s.empty())
 {
  cout << s.top() << ' ';//用函数top读取stack顶上的元素并输出
  s.pop();//用函数pop删除顶上的元素
 }
}

2.标准队列容器

标准队列容器也是使用适配器与一种基础容器向结合来实现的,其基础容器通常用列表容器(list)或双端列表容器(deque),默认情况下以deque实现,队列适配器提供特殊的操作功能,可以从基础数据结构的末尾插入元素或在开头删除元素(即入队和出队),例如:

queue<int,deque<int>> myQueue;

声明了一个基础容器为deque,元素类型为int的队列对象myQueue。

队列适配器是在<queue>头文件中声明的。

例子:应用标准库中的deque顺序容器生成一个整数标准队列Queue

#include<iostream>
#include<queue>
using namespace std;
template<class T>
void popElements(T &s);
int main()
{
 queue<int> intDueque;//默认情况下以Queue容器作为基础数据结构
 for (int i = 0; i < 10; i++)
  intDueque.push(i);//用push函数将整数添加到deque容器Queue顶部
 cout << "Popping form intDequeQueue:";
 popElements(intDueque);//将Queue中的元素弹出并输出
 getchar();
 getchar();
 cout << endl;
}
template<class T>
void popElements(T& s)//定义模板函数
{
 while (!s.empty())
 {
  cout << s.front() << ' ';
  s.pop();
 }
}

8、泛型程序设计与c++标准模板库2.5容器适配器的更多相关文章

  1. 8、泛型程序设计与c++标准模板库1、泛型程序设计的概念和术语

    有效地利用已有的成果,将经典的.优秀的算法标准化.模块化,从而提高软件的生产率,是软件产业化的需求,为了实现这一需求,不仅需要面向对象设计思想,而且需要泛型程序设计思想. c++语言提供的标准模板库( ...

  2. 8、泛型程序设计与c++标准模板库4.标准c++库中的算法

    标准c++算法是通过迭代器和模板来实现的,其实算法本身就是一种函数模板. 算法从迭代器那里获得一个元素,而迭代器则知道一个元素在容器中的什么位置.迭代器查找元素的位置并将这些信息提供给算法以便算法能够 ...

  3. 8、泛型程序设计与c++标准模板库2、c++标准模板库中的容器

    顺序容器类以逻辑线性排列方式存储元素,在这些容器类型中的元素在逻辑上被认为是连续的存储空间中存储的.顺序容器可用于存储线性群体. 在关联容器类中,元素的存储和检索基于关键字和元素与其他元素之间的关系, ...

  4. C++学习笔记53:泛型程序设计与C++标准模板库

    泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++模板为泛型编程程序设计奠定了关键的基础 模型:符合一个概念的数据类型称为该概念的模型,例如: ...

  5. 8、泛型程序设计与c++标准模板库2.2向量容器

    向量容器属于顺序容器,用于容纳不定长线性序列(即线性群体),提供对序列的快速随机访问(也称直接访问).这一点与c++语言支持的基本数组类型相同,但基本数据类型不是面向对象的.而面向对象的向量是动态结构 ...

  6. 8、泛型程序设计与c++标准模板库5.函数对象

    1.函数对象 函数对象是STL提供的第四类主要组件,它使得STL的应用更加灵活方便,从而增强了算法的通用性.大多数STL算法可以用一个函数对象作为参数.所谓“函数对象”其实就是一个行为类似函数的对象, ...

  7. 8、泛型程序设计与c++标准模板库3.迭代器

    理解迭代器对于理解STL框架并掌握STL的使用至关重要.简单地说,迭代器是面向对象版本的指针,STL算法利用迭代器对存储在容器中的元素序列进行遍历,迭代器提供了访问容器和序列中每个元素的方法. 虽然指 ...

  8. 8、泛型程序设计与c++标准模板库2.3双端队列容器

    双端队列容器是一种放松了访问权限的队列.除了从队列的首部和尾部访问元素外,标准的双端队列也支持通过使用下标操作符"[]"进行直接访问. 它提供了直接访问和顺序访问方法.其头文件为& ...

  9. 第十章 泛型程序设计与C++标准模板库 泛型程序设计及STL的结构

随机推荐

  1. zookeeper学习与实战(二)集群部署

    上一篇介绍了单机版zookeeper安装,这种情况一般用于开发测试.如果是生产环境建议用分布式集群部署,防止单点故障,增加zookeeper服务的高可用. [环境介绍]       三台机器:192. ...

  2. Python 3 并发编程多进程之进程同步(锁)

    Python 3 并发编程多进程之进程同步(锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,竞争带来的结果就是错乱,如何控制,就是加锁处理. 1. ...

  3. P4619 [SDOI2018]旧试题

    题目 P4619 [SDOI2018]旧试题 Ps:山东的题目可真(du)好(liu),思维+码量的神仙题 推式 求\(\sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^Cd(ij ...

  4. MyBatis入门级Demo

    1.创建Java工程MyBatisTest001,导入jar包(mybatis-3.2.1/mysql-connector-java-5.1.24-bin); 2.创建User表,数据库(MySql) ...

  5. Android平台及其架构(部分转载)

    一.Android的系统架构 1.      应用程序 同Android系统一起发布的核心应用程序,如email 客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等. 这些应用程序都是用 ...

  6. WCF REST开启Cors 解决 No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. The response had HTTP status code 405.

    现象: 编写了REST接口: [ServiceContract] public interface IService1 { [OperationContract] [WebInvoke(UriTemp ...

  7. Delphi 实现检测线程类TThread是否结束

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  8. JavaUtil_07_HttpUtil_使用Hutool 封装的 HttpUtil

    二.参考资料 1.[Hutool]Hutool工具类之Http工具——HttpUtil

  9. php导出内容到txt并自动弹出下载文件

    php将内容保存到txt文件中,并自动弹出下载文件窗口的方法: $id=array('我爱学习网http://www.5ixuexiwang.com','汇享在线工具箱http://tool.huix ...

  10. (转)C协程实现的效率对比

    前段时间实现的C协程依赖栈传递参数,在开启优化时会导致错误,于是实现了一个ucontext的版本,但ucontext的切换效率太差了, 在我的机器上执行4000W次切换需要11秒左右,这达不到我的要求 ...