容器适配器是用来扩展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. [原创] hadoop学习笔记:重新格式化HDFS文件系统

    所谓的重新格式化HDFS文件系统,实际意味着重新的创建一个HDFS文件系统.也就是说,必须将先前的已经有的文件系统配置删除.如下: 笔者采用的是最小化安装 这个是core-site.xml配置 这个是 ...

  2. mutation与action

    mutation 作用: 更改state的状态 说明: 每个mutation对象都有字符串类型(type)与回调函数,在回调函数内进行状态修改,回调函数的第一个参数为state eg: mutatio ...

  3. nginx location 语法

    location 语法location 有”定位”的意思, 根据Uri来进行不同的定位.在虚拟主机的配置中,是必不可少的,location可以把网站的不同部分,定位到不同的处理方式上.比如, 碰到.p ...

  4. 关于使用unigui、webxone、mysql的几个问题

    一.webxone的问题:1.目前稳定可用的版本好像是v2510:2.设计webxone应用时,窗口的“position”属性只能设置为poDesigned,而且不能动态改变窗口尺寸,否则在浏览器中显 ...

  5. 算法(Algorithms)第4版 练习 2.3.25

      代码实现: public static void sort(Comparable[] a) { StdRandom.shuffle(a);//eliminate dependence on inp ...

  6. Delphi TcxComboBox控件说明

    属性: Text:ComboBox 的文本信息 EditText: 也是给ComboBox 的文本信息赋值,但不同的是 给Text赋值会 触发 Change事件,也会触发 EditvaluesChan ...

  7. javaScript-进阶篇(二)

    JavaScript的内置对象 JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽 ...

  8. Handler的另外一种用法(HandlerThread)

    直接上代码: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Handler ...

  9. 【遍历二叉树】04二叉树的层次遍历【Binary Tree Level Order Traversal】

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树,返回他的层次遍历的 ...

  10. debian软件安装和卸载

    用root身份执行如下命令: dpkg -l |grep "^rc"|awk '{print $2}' |xargs aptitude -y purge dpkg是Debian P ...