容器适配器是用来扩展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. Android系统Recovery工作原理之使用update.zip升级过程分析(三)【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7464699 以下的篇幅开始分析我们在上两个篇幅中生成的update.zip包在具体更新中所经 ...

  2. jquery带下拉菜单和焦点图

    jQuery,下拉菜单,二级菜单,索引按钮,焦点图代码,jquery带下拉菜单和焦点图是一款顶部通栏带二级下拉菜单和banner导航菜单代码. JQuery特效代码来源:http://www.huiy ...

  3. 一张图理解is_nll isset empty

    isset 判断变量是否已存在,如果变量存在则返回 TRUE,否则返回 FALSE. empty 判断变量是否为空,如果变量是非空 或非零 的值,则 empty() 返回 FALSE.换句话说,&qu ...

  4. 七 Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化

    F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from django.db.models import F from django.shortcuts import rende ...

  5. Python基础-os、sys模块

    一,os模块import os ,sysos.system('ipconfig')#执行操作系统命令,获取不到返回结果 os.popen()#也可以执行操作系统命令,可以返回命令执行结果,但需要rea ...

  6. guava_学习_00_资源帖

    一.精选 1.Google Guava 官方教程 二.参考资源 1.Google Guava官方教程(中文版) 2.使用Guava编写优雅代码 3.Google guava工具类的介绍和使用

  7. 第一章 走进Python

    目标 了解Python的历史 了解Python的特征 了解Python的应用 掌握Linux下Python开发环境的搭建 理解Windows下Python环境搭建 案例 安装Python,写出第一个P ...

  8. 动态规划 两个字符串之间的编辑距离 leetcode72

    public static int minDistance(String word1, String word2) { char[] s1 = word1.toCharArray(); char[] ...

  9. User-Agent 及其构造

    url = ... user_agent = ... headers = {'User-Agent' : user_agent} req = requests.request(url=url, hea ...

  10. Linux编程之错误代码

    头文件/usr/include/asm-generic/errno-base.h定义错误码: #ifndef _ASM_GENERIC_ERRNO_BASE_H #define _ASM_GENERI ...