C++语法(12)---- 模拟实现queue和stack

C++语法(11)---- 模拟实现list_哈里沃克的博客-CSDN博客icon-default.png?t=N2N8https://blog.csdn.net/m0_63488627/article/details/129773011目录

1.设计模式

2.实现stack

3.实现queue

4.deque


1.设计模式

设计模式是写代码的一种策略,面对项目有套路的设计,这里只介绍几种设计模式

1.迭代器模式,stl中的迭代器在封装后不暴露内部细节,使得上层使用时达到一种统一的方法访问

2.适配器模式,用于转换,通关原有的内容封装转换出自己想要的东西

2.实现stack

自己想要实现,需要数组一点一点堆上去,但是适配器模式下,我们想想是否可以用写过的stl来实现呢?其实答案很明显vector和list可以来封装转化

stack用vector更好,因为删除只涉及尾删

下面是细节代码

#pragma once
#include<iostream>
#include<vector>
#include<list>

namespace MY
{
	template<class T,class Container = vector<T>>
	class stack
	{
	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();
		}

		size_t size()
		{
			return _con.size();
		}

	private:
		Container _con;
	};
}

3.实现queue

如法炮制,queue也可以使用适配器模式封装来得到自己想要的

queue用list更好,因为只支持头删,vector头删效率低

#pragma once
#include<iostream>
#include<vector>
#include<list>

namespace MY
{
	template<class T, class Container = list<T>>
	class queue
	{
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}

		void pop()
		{
			_con.pop_front();
		}

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

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

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

		size_t size()
		{
			return _con.size();
		}

	private:
		Container _con;
	};
}

4.deque

1.我们之前讲过,list和vector各有优缺点,那么是否有一个stl可以弥补二者的缺点呢

2.deque就是这样一个数据结构,他头尾插入删除效率高,且支持随机访问

 

不过,它真的万金油吗?这就需要介绍一下它的具体实现方式了

1.其实现模式大致如此,即一个指针数组指向多个数组,在中间开始 

2.头插就是将数据往最前面的数组尾部向前插入

3.尾插就是将数据往最后面的数组尾部向后插入

4.对于随机访问就是通过取模等一系列运算找到某个特定数组的下标,那么我们知道其实随机访问的数据量很大,其实这些取模的运算也耗费时间,不如vector的直接随机访问

5.对于中间插入,还需要把后面的或者前面的数据往两边移动,会发现如果数据量庞大,别说移动的耗费时间效率,实现也是一个非常恼人的操作,对比其list的中间插入只需要改变指针指向相比确实差得远了

6.如果数据过大,这些存数据的数组不需要改变,只需要改变指针数组的容量,随后将里面的内容复制,再释放原来的空间

7.如果针对要计较起来,其实数据浪费也有存在,这个得看数组的设计容量多大和实际数据的大小对比了

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要使用ActiveMQ-CPP库实现上传数据功能,你需要按照以下步骤进行操作: 1. 首先,确保你已经安装了ActiveMQ-CPP库。你可以在ActiveMQ官方网站上找到相应的下载链接和安装说明。 2. 在你的C++项目中,包含ActiveMQ-CPP的头文件: ```cpp #include <activemq/core/ActiveMQConnectionFactory.h> #include <activemq/library/ActiveMQCPP.h> ``` 3. 创建一个连接工厂,并设置ActiveMQ服务器的连接地址和端口: ```cpp std::string brokerURI = "tcp://localhost:61616"; activemq::core::ActiveMQConnectionFactory connectionFactory(brokerURI); ``` 4. 创建一个连接,并启动它: ```cpp activemq::core::Connection* connection = connectionFactory.createConnection(); connection->start(); ``` 5. 创建一个会话,并指定会话类型和订阅目的地: ```cpp activemq::core::Session* session = connection->createSession(activemq::core::Session::AUTO_ACKNOWLEDGE); activemq::core::Destination* destination = session->createQueue("your_queue_name"); ``` 6. 创建一个消息生产者,用于发送数据: ```cpp activemq::core::MessageProducer* producer = session->createProducer(destination); ``` 7. 构建一个消息对象,并设置消息内容: ```cpp activemq::core::TextMessage* message = session->createTextMessage(); message->setText("Your data here"); ``` 8. 发送消息到目的地: ```cpp producer->send(message); ``` 9. 清理资源并关闭连接: ```cpp delete message; delete producer; session->close(); connection->close(); ``` 这只是一个基本的示例,你可以根据你的需求进行进一步的代码编写和功能实现。请确保在使用完资源后正确释放它们,以避免内存泄漏。 希望这个示例能帮到你,如果你还有其他问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈里沃克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值