8、泛型程序设计与c++标准模板库2.5容器适配器

容器适配器是用来扩展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();
 }
}

上一篇:C++ 容器:顺序性容器、关联式容器和容器适配器


下一篇:刚接触js不久,自己写的banner幻灯片效果。