C++学习9.27
1、顺序表、栈、队列都更改成模板类
(1)顺序表
#include <iostream>
#include <cstring>using namespace std;template <typename T1,typename T2,typename T3>
class My_string
{
private:T1 *ptr; //指向字符数组的指针T2 size; //字符串的最大容量T3 len; //字符串当前容量public://无参构造My_string():size(15){this->ptr = new char[size];this->ptr[0] = '\0'; //表示串为空串this->len = 0;}//有参构造My_string(const T1 src){len = strlen(src);size = len+1;ptr = new char[size];strcpy(ptr,src);}My_string(T2 num, T1 value): size(num+1),len(num){ptr = new char[size];for(int i=0;i<num;i++){ptr[i] = value;}ptr[num] = '\0';}//拷贝构造My_string(const T1 &other):size(other.size),len(other.len){ptr = new char[size];strcpy(ptr,other.ptr);}//拷贝赋值template <typename T>My_string & operator =(const T &other){if(this ==&other){return *this;}delete [] ptr;size = other.size;len = other.len;ptr = new char[size];strcpy(ptr,other.ptr);return *this;}//析构函数~My_string(){delete [] ptr;}//判空bool empty(){return len ==0;}//尾插template <typename T>void push_back(T value){if(len+1>=size){size *=2;char* new_ptr = new char[size];strcpy(new_ptr,ptr);delete []ptr;ptr = new_ptr;}ptr[len] = value;len++;ptr[len] = '\0';}//尾删void pop_back(){if(len>0){len--;ptr[len]='\0';}}//at函数实现template <typename T>char &at(T index){if(index<0 ||index>=len){//throw out_of_range("超出");}return ptr[index];}//清空函数void clear(){len = 0;ptr[0] = '\0';}//返回C风格字符串char* data(){return ptr;}//返回实际长度int get_length(){return len;}//返回当前最大容量int get_size(){return size;}void show(){cout<<ptr<<" ";}};int main()
{My_string <char,int,int>s1;s1.push_back<char>('d');s1.show();}
(2)栈
#include <iostream>using namespace std;template <typename T1,typename T2,typename T3>
class My_stack
{
private:T1 *ptr;T2 size;T3 top;public:My_stack():size(20),top(-1){ptr = new char[size];}My_stack(int num){size = num;ptr = new char[num];top = -1;}template <typename T>My_stack(const T &other){top = other.top;size = other.size;ptr = new char[size];for(int i=0;i<size;i++){ptr[i] = other.ptr[i];}}template <typename T>My_stack &operator=(const T &other){if(this==&other){return *this;}delete [] ptr;top = other.top;size = other.size;ptr = new char[size];for(int i=0;i<size;i++){ptr[i] = other.ptr[i];}return *this;}char My_top(){return ptr[top];}void My_empty(){if(top==-1){cout<<"栈为空"<<endl;}else{cout<<"栈不为空"<<endl;}}int My_size(){return top+1;}template <typename T>void My_push(const T dat){if(top+1==size){cout<<"栈满不能继续添加"<<endl;}else{ptr[++top] = dat;}}void My_pop(){ptr[top--] = 0;}};int main()
{My_stack <char,int,int>my_stack;my_stack.My_push('1');my_stack.My_push('2');my_stack.My_push('3');cout << "Top: " << my_stack.My_top() <<endl;my_stack.My_pop();my_stack.My_empty();cout << "Size: " << my_stack.My_size() <<endl;return 0;
}
(3)队列
#include <iostream>using namespace std;#include <iostream>
#include <stdexcept>template<typename T1,typename T2,typename T3,typename T4>
class My_queue
{
private:T1 *ptr;T2 size;T3 back;T4 fro;public:My_queue():size(20),back(0),fro(0){ptr = new char[size];}template<typename T>My_queue(T num){size = num;ptr = new char[num];back = 0;fro = 0;}~My_queue(){delete [] ptr;}template<typename T>My_queue(const T &other){fro = other.fro;back = other.back;size = other.size;ptr = new char[size];for(int i=0;i<size;i++){ptr[i] = other.ptr[i];}}template<typename T>My_queue &operator=(const T &other){if(this==&other){return *this;}delete [] ptr;fro = other.fro;back = other.back;size = other.size;ptr = new char[size];for(int i=0;i<size;i++){ptr[i] = other.ptr[i];}return *this;}char My_front(){return ptr[fro];}char My_back(){return ptr[back-1];}bool My_empty(){return fro == back;}int My_size(){return back - fro;}template<typename T>void My_push(const T dat){if(back+1==size){cout<<"栈满不能继续添加"<<endl;}else{ptr[back++] = dat;}}void My_pop(){ptr[fro++] = 0;}};int main()
{My_queue <char,int,int,int> my_queue;my_queue.My_push('c');my_queue.My_push('2');cout << "Front: " << my_queue.My_front() <<endl; // 输出 1cout<<"back:"<<my_queue.My_back()<<endl;cout << "Size: " << my_queue.My_size() << endl; // 输出 1return 0;
}
2、思维导图
相关文章:

C++学习9.27
1、顺序表、栈、队列都更改成模板类 (1)顺序表 #include <iostream> #include <cstring>using namespace std;template <typename T1,typename T2,typename T3> class My_string { private:T1 *ptr; //指向字符数组的指针T2…...

【STM32开发环境搭建】-1-Keil(MDK) 5.27软件安装和注册教程
目录 1 安装前装备工作 2 安装KEIL(MDK-ARM) 5.27软件 3 注册KEIL(MDK-ARM) 5.27软件,获取License许可证 4 手动安装STM32F0,STM32F1,STM32F4,STM32F7,STM32H7的支持包 4.1 下载STM32的支持包 4.2 安装STM32的支…...
武汉正向科技格雷母线公司,无人天车系统,采用格雷母线定位技术
正向科技-格雷母线高精确定位技术-实操视频 高精度格雷母线内胆采用刚性内胆,基板采用精密度数控加工工艺,穿线卡采用高精度模具制作,不采用泡沫板填充,提高了地址检测精度和线性度。 最新一代的格雷母线定位技术特点是全数字化检…...

【保姆级教程】批量下载Pexels视频Python脚本(以HumanVid数据集为例)
目录 方案一:转换链接为download模式 方案二:获取源链接后下载 附录:HumanVid链接 方案一:转换链接为download模式 将下载链接的后缀加入 /download 然后用下面的脚本下载: import argparse import json import o…...

Python画笔案例-067 绘制配乐七角星
1、绘制橙子 通过 python 的turtle 库绘制 配乐七角星,如下图: 2、实现代码 绘制 配乐七角星 ,以下为实现代码: """配乐七角星.py本程序需要coloradd模块支持,安装方法:pip install coloradd""" import turtle from coloradd import color…...
Spark Job 对象 详解
在 Apache Spark 中,Job 对象是执行逻辑的核心组件之一,它代表了对一系列数据操作(如 transformations 和 actions)的提交。理解 Job 的本质和它在 Spark 中的运行机制,有助于深入理解 Spark 的任务调度、执行模型和容…...
C#中NModbus4中常用的方法
NModbus4 是一个用于 Modbus 协议通信的 C# 库,它支持串行 ASCII、RTU、TCP 和 UDP 协议。以下是 NModbus4 中常用的一些方法: 创建连接: ModbusSerialMaster.CreateRtu(SerialPort serialPort): 创建一个 RTU 串行连接。ModbusSerialMaster.…...

【Linux】线程同步与互斥
一、线程间互斥 1 .进程线程间的互斥相关概念 临界资源:多线程执行流共享的资源就叫做临界资源 临界区:每个线程内部,访问临界资源的代码,就叫做临界区 互斥:任何时刻,互斥保证有且只有一个执行流进入临界…...

003、网关路由问题
1. nginx配置404跳转回默认路由 https://blog.csdn.net/masteryee/article/details/83689954 https://blog.csdn.net/IbcVue/article/details/133230460 https://www.jb51.net/server/317970ynk.htm https://blog.csdn.net/u014438244/article/details/120531287 https://blog…...
Eclipse 快捷键:提高开发效率的利器
Eclipse 快捷键:提高开发效率的利器 Eclipse 是一款广泛使用的集成开发环境(IDE),它为Java、C、PHP等编程语言提供了强大的开发支持。对于开发者来说,熟练掌握Eclipse的快捷键不仅能提高编码效率,还能减少…...
Agent智能体
Agent(智能体)是一个能够感知环境并采取行动的自主实体,通常被设计用于在特定的环境中执行任务。智能体可以通过学习、推理等方式来决策,目标是最大化某种效用或实现某个预定的目标。它们广泛应用于自动化系统、游戏AI、机器人、自…...

用Promise实现前端并发请求
/** * 构造假请求 */ async function request(url) {return new Promise((resolve) > {setTimeout(() > {resolve(url);},// Math.random() * 500 800,1000,);}); }请求一次,查看耗时,预计应该是1s: async function requestOnce() {c…...

通过队列实现栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int to…...

Mac下可以平替paste的软件pastemate,在windows上也能用,还可以实现数据多端同步
Mac平台上非常经典的剪贴板管理工具:「Paste」。作为一款功能完善且易用的工具,「Paste」在实际使用中体现出了许多令人欣赏的特点。但是它是一个收费软件,一年至少要24美元. 现有一平替软件pastemate,功能更加丰富,使用更加方便。 下载地址…...

106. 从中序与后序遍历序列构造二叉树
文章目录 106. 从中序与后序遍历序列构造二叉树思路 105. 从前序与中序遍历序列构造二叉树思路 思考 106. 从中序与后序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和postorder,其中 inorder 是二叉树的中序遍历ÿ…...
监控和日志管理:深入了解Nagios、Zabbix和Prometheus
在现代IT运维中,监控和日志管理是确保系统稳定性和性能的关键环节。本文将介绍三种流行的监控工具:Nagios、Zabbix和Prometheus,帮助您了解它们的特点、使用场景以及如何进行基本配置。 一、Nagios Nagios 是一个强大的开源监控系统&#x…...
Win10下载Python:一步步指南
Win10下载Python:一步步指南 在Win10操作系统中下载并安装Python可能是一项挑战性的任务,但是在本文中,我们将向您提供三个不同的方法,以便轻松地完成这项任务。 方法一:使用Microsoft Store Microsoft Store是一个…...

Race Karts Pack 全管线 卡丁车赛车模型素材
是8辆高细节、可定制的赛车,内部有纹理。经过优化,可在手机游戏中使用。Unity车辆系统已实施-准备驾驶。 此套装包含8种不同的车辆,每种车辆有8-10种颜色变化,总共有75种车辆变化! 技术细节: -每辆卡丁车模型使用4种材料(车身、玻璃、车轮和BrakeFlare) 纹理大小: -车…...
C#——switch案例讲解
案例:根据输入的内容判断执行哪一条输出语句 string number txtUserName.Text; switch(number) { case"101":MessageBox.Show("您进入了101房间");break; case"102":MessageBox.Show("您进入了102房间");break; case&quo…...

技术美术一百问(02)
问题 前向渲染和延迟渲染的流程 前向渲染和延迟渲染的区别 G-Buffer是什么 前向渲染和延迟渲染各自擅长的方向总结 GPU pipeline是怎么样的 Tessellation的三个阶段 什么是图形渲染API? 常见的图形渲染API有哪些? 答案 1.前向渲染和延迟渲染的流程 【例图…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...