当前位置: 首页 > 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;
}

相关文章:

  • 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完成方案分享
  • 万户网络学校网站建设/营销型网站的类型有哪些
  • 设计师常用素材网站/免费模板网站
  • 湖北响应式网站建设/公众号引流推广平台
  • 厦门手机网站建设公司/品牌推广外包
  • 网站交互用什么做/东莞网站建设工作
  • 昆明网站建设制作/百度推广服务