当前位置: 首页 > news >正文

容器适配方法模拟Stack和Queue

1.首先介绍一个新的容器deque:

在C++中,`deque`(双端队列)是标准模板库里功能独特的容器。它优点显著,能在两端以$O(1)$时间复杂度高效插入和删除元素,也支持像数组那样以$O(1)$时间复杂度随机访问,还自带动态内存管理,使用方便。不过其缺点也不容忽视,因采用多数组块结构,内存开销比连续存储的`vector`大,在容器中间位置插入和删除元素时效率低,时间复杂度为$O(n)$,迭代器稳定性也较差。在使用场景上,`deque`适合构建双端队列数据结构,像任务调度器场景;也适用于既需随机访问又要频繁在两端操作的情况,如滑动窗口算法;但不适合频繁在容器中间插入和删除元素的场景,遇到此类场景更推荐`list`容器 。

接下来是用deque来当作缺省参数!!!!!

模拟栈:

namespace hush1
{
	//容器适配器的方法----container不用考虑是什么底层容器,都可以适配出栈的先进后出
	template<class T,class container=deque<T>>
	class stack
	{
		typedef T* iterator;
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}
		void pop()
		{
			_con.pop_back();
		}
		const T& top()
		{
			return _con.back();
		}

		bool empty()
		{
			return _con.empty();
		}

		bool size()
		{
			return _con.size();
		}
	private:
		/*size_t* _arry;
		size_t size;*/
		container _con;
 	};
}

 模拟队列:

namespace hush2
{
	template<class T,class container=deque<T>>
	class queue
	{
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}
		void pop()
		{
			_con.pop_front();
		}

		bool empty()
		{
			return _con.empty();
		}

		const T& top()
		{
			return _con.front();
		}

		const T& back()
		{
			return _con.back();
		}


	private:
		container _con;
	};
}

main检验:

#include"SQ.h"



void test_stack()
{
	hush1::stack<int, vector<int>> v;
	v.push(1);
	v.push(2);

	v.push(3);
	v.pop();
	int ret = v.top();
	cout << ret << endl;

	/*for (size_t i = 0; i < v.size(); ++i)
	{

		cout << v[i] << end;
	}*/
}

void test_queue()
{
	hush2::queue<int> q;
	q.push(1);
	q.push(2);
	q.push(3);
	q.push(4);
	q.push(5);
	while (!q.empty())
	{
		cout << q.top() << endl;
		q.pop();
	}
	cout << endl;

}


int main()
{
	/*test_stack();*/
	test_queue();
	return 0;
}


文章转载自:
http://aerophone.zzyjnl.cn
http://beauty.zzyjnl.cn
http://celerity.zzyjnl.cn
http://chromatism.zzyjnl.cn
http://bedlamite.zzyjnl.cn
http://bordure.zzyjnl.cn
http://amplify.zzyjnl.cn
http://chromogen.zzyjnl.cn
http://binnacle.zzyjnl.cn
http://catnap.zzyjnl.cn
http://apagogic.zzyjnl.cn
http://armorbearer.zzyjnl.cn
http://capillary.zzyjnl.cn
http://bulky.zzyjnl.cn
http://blowgun.zzyjnl.cn
http://avengingly.zzyjnl.cn
http://castoreum.zzyjnl.cn
http://abstractionism.zzyjnl.cn
http://carretela.zzyjnl.cn
http://brannigan.zzyjnl.cn
http://astronautical.zzyjnl.cn
http://balpa.zzyjnl.cn
http://abatement.zzyjnl.cn
http://adsl.zzyjnl.cn
http://atramentous.zzyjnl.cn
http://biomass.zzyjnl.cn
http://chartreuse.zzyjnl.cn
http://adventurism.zzyjnl.cn
http://balibuntal.zzyjnl.cn
http://ceasefire.zzyjnl.cn
http://www.dtcms.com/a/66250.html

相关文章:

  • Ansible命令行模式常用模块使用案例(二)
  • Keil创建stm32f103c8t6标准库
  • c++常用的算术生成算法
  • 深度学习项目--基于DenseNet网络的“乳腺癌图像识别”,准确率090%+,pytorch复现
  • RGV调度算法
  • C++20 `<bit>` 中的整数 2 的幂运算和 `std::bit_cast`:由浅入深的探索
  • 【土地智慧】解码土地利用的基本方针
  • 汉桑科技IPO:潜藏两大风险 公众投资者权益或受损
  • MistralAI挑战DeepSeek:开源模型能否颠覆行业巨头
  • 第6关:牛牛鱼缸-附加题
  • 工作记录 2017-01-09
  • Django系列教程(8)——函数视图及通用类视图
  • 【DevOps】使用Azure DevOps为Azure静态网站配置多阶段部署
  • OpenHarmony 编译运行qemu模拟设备
  • [内网渗透] 红日靶场2
  • Unity | 工具类:消息管理器-延迟分发
  • CSS3 用户界面设计指南
  • Vue3计算属性深度解析:经典场景与Vue2对比
  • 「JavaScript深入」Web Components:构建可重用的跨框架组件
  • 【图片合并PDF】多个文件夹里的图片合并PDF,一次性批量合并多个文件夹里的图片转成PDF,基于WPF完成方案分享
  • Netty启动源码NioEventLoop剖析accept剖析read剖析write剖析
  • windows系统,pycharm运行.sh文件
  • 【已解决】电脑空间告急?我的 Ollama、Docker Desktop软件卸载清理全记录
  • environment.resolvePlaceholders占位符解析优化
  • 分布式事务中XA 事务 和 两阶段提交(2PC)应该如何理解?
  • 自定义日志回调函数实现第三方库日志集成:从理论到实战
  • 前端面试:px 如何转为 rem
  • mysql select distinct 和 group by 哪个效率高
  • 单一责任原则在Java设计模式中的深度解析
  • 完全二叉树节点的数量 平衡二叉树