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();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】