坐牢第三十五天(c++)

news/2024/9/17 7:44:20/ 标签: c++, linux

一.作业

1.使用模版类自定义栈

代码:

#include <iostream>
using namespace std;
template<typename T>
// 封装一个栈
class stcak
{
private:T *data;    //int max_size; // 最大容量int top;      // 下标
public:// 无参构造函数stcak();// 有参构造函数stcak(int size);// 拷贝构造函数stcak(const stcak &other);// 析构函数~stcak();// 判空函数bool empty();// 判满函数bool full();// 扩容函数void resize(int new_size);// 返回元素个数函数int size();// 向栈顶插入元素函数void push(T value);// 删除栈顶元素函数T pop();// 访问栈顶元素函数T get_top();// 赋值重载函数stcak &operator=(const stcak &other);// 遍历栈里元素函数void show();//清空队列函数void clear();
};
// 无参构造函数
template<typename T>
stcak<T>::stcak() : max_size(10)
{data = new T[10];max_size = 10;top = -1;cout << "无参构造" << endl;
}
// 有参构造函数
template<typename T>
stcak<T>::stcak(int size)
{data = new T[size];max_size = size;top = -1;cout << "有参构造" << endl;
}
// 拷贝构造函数
template<typename T>
stcak<T>::stcak(const stcak &other)
{max_size = other.max_size;top = other.top;data = new T[max_size];for (int i = 0; i <= top; i++){data[i] = other.data[i];}cout << "拷贝构造" << endl;
}
// 析构函数
template<typename T>
stcak<T>::~stcak()
{delete[] data;cout << "析构函数" << endl;
}
// 判空函数
template<typename T>
bool stcak<T>::empty()
{return top == -1;
}
// 判满函数
template<typename T>
bool stcak<T>::full()
{return top == max_size - 1;
}
// 扩容函数
template<typename T>
void stcak<T>::resize(int new_size)
{int *new_data = new T[new_size];for (int i = 0; i <= top; i++){new_data[i] = data[i];}delete[] data;data = new_data;max_size = new_size;
}
// 返回元素个数函数
template<typename T>
int stcak<T>::size()
{return top + 1;
}
// 向栈顶插入元素函数
template<typename T>
void stcak<T>::push(T value)
{if (full()){// 调用扩容函数resize(max_size * 2);}data[++top] = value;
}
// 删除栈顶元素函数
template<typename T>
T stcak<T>::pop()
{if (empty()){cout << "栈是空的";return -1;}return data[top--]; // 出栈
}
// 访问栈顶元素函数
template<typename T>
T stcak<T>::get_top()
{if (empty()){cout << "栈是空的";return T();}return data[top];
}
// 赋值重载函数
template<typename T>
stcak<T> &stcak<T>::operator=(const stcak &other)
{if (this == &other){return *this;}delete[] data;max_size = other.max_size;top = other.top;data = new T[max_size];for (int i = 0; i <= top; i++){data[i] = other.data[i];}return *this;
}
// 遍历栈里元素函数
template<typename T>
void stcak<T>::show()
{if (empty()){cout << "遍历失败栈是空的"<<endl;return;}cout << "栈里元素有:"<<endl;for (int i = 0; i <= top; i++){cout<< data[i] <<'\t'; }cout <<endl;
}
//清空栈函数
template<typename T>
void stcak<T>::clear()
{top=-1;cout <<"栈已清空"<<endl;
}
/******************主函数*********************/ 
int main()
{   stcak<int> s;s.push(1);s.push(2);s.push(3);s.show();cout << "栈的大小:" << s.size() << endl;cout <<s.get_top()<< endl;s.pop();s.show();cout << "栈的大小:" << s.size() << endl;s.clear();s.show();return 0;
}

结果:

2.使用模版类自定义队列

代码:

#include <iostream>
using namespace std;
template<typename T>
class queue
{
private:T *data;    // 容器int max_size; // 最大容量int front;    // 头下标int tail;     // 尾下标
public:// 无参构造函数queue();// 有参构造函数queue(int size);// 拷贝构造函数queue(const queue &other);// 析构函数~queue();// 判空函数bool empty();// 判满函数bool full();// 扩容函数void resize(int new_size);// 元素个数函数int size();// 向队列尾部插入元素函数void push(T value);// 删除首个元素函数 出队void pop();// 遍历队列元素void show();// 赋值重载函数queue &operator=(const queue &other);//清空队列函数void clear();
};
// 无参构造函数
template<typename T>
queue<T>::queue():max_size(10)
{data = new T[10];max_size = 10;front = tail = 0;cout << "无参构造" << endl;
}
// 有参构造函数
template<typename T>
queue<T>::queue(int size)
{data = new T[size];max_size = size;front = tail = 0;cout << "有参构造" << endl;
}
// 拷贝构造函数
template<typename T>
queue<T>::queue(const queue &other)
{max_size=other.max_size;front=other.front;tail=other.tail;data=new T[max_size];for (int i = front; i != tail; i = (i + 1) % max_size){data[i]=other.data[i];}   cout << "拷贝构造" << endl;
}
// 析构函数
template<typename T>
queue<T>::~queue()
{delete[] data;cout << "析构函数" << endl;
}
// 判空函数
template<typename T>
bool queue<T>::empty()
{return front == tail;
}
// 判满函数
template<typename T>
bool queue<T>::full()
{return (tail+1)% max_size == front;
}
// 元素个数函数
template<typename T>
int queue<T>::size()
{return (tail-front+max_size) % max_size;
}
// 扩容函数
template<typename T>
void queue<T>::resize(int new_size)
{int *new_data = new T[new_size];for (int i = front; i <= tail; i++){new_data[i] = data[i];}data = new_data;max_size = new_size;front =0;tail =size();
}
// 向队列尾部插入元素函数
template<typename T>
void queue<T>::push(T value)
{if (full()){// 调用扩容函数resize(max_size * 2);}data[tail] = value;tail = (tail + 1) % max_size;
}
// 删除首个元素函数 出队
template<typename T>
void queue<T>::pop()
{if (empty()){cout << "队列为空" << endl;return ;}cout << data[front] << "出队" << endl;front = (front + 1) % max_size;// return 0;
}
// 遍历队列元素
template<typename T>
void queue<T>::show()
{if (empty()){cout << "遍历失败队列为空" << endl;return;}cout << "队列元素:" << endl;for (int i = front; i != tail; i = (i + 1) % max_size){cout << data[i] << '\t';}cout << endl;
}
// 赋值重载函数
template<typename T>
queue<T> &queue<T>::operator=(const queue &other)
{if (this == &other){return *this;}delete []data;max_size=other.max_size;front=other.front;tail=other.tail;data=new T[max_size];for (int i = front; i != tail; i = (i + 1) % max_size){data[i]=other.data[i];}cout << "拷贝赋值函数" <<endl;  return *this; 
}
//清空队列函数
template<typename T>
void queue<T>::clear()
{front=tail=0;cout << "队列已清空"<<endl;
}
/******************主函数*********************/
int main()
{queue<int> s;s.push(1);s.push(2);s.push(3);s.show();cout << "队列的大小:" << s.size() << endl;s.pop();s.show();cout << "队列的大小:" << s.size() << endl;s.clear();s.show();return 0;
}

结果:

3.使用模版类自定义动态数组

代码:

#include <iostream>
#include <cstring> // 引入cstring以使用memcpy
using namespace std;template <typename T>
class SeqList
{
private:T *data;      // 顺序表的数组int max_size; // 容器最大内存int size = 0; // 数组的大小int len = 0;  // 顺序表实际长度public:// 构造函数SeqList(){init(10, 100);}SeqList(int s, int max_s){init(s, max_s);}// 析构函数~SeqList(){free();}// 拷贝构造SeqList(const SeqList<T> &other){init(other.size, other.max_size);for (int i = 0; i < other.len; i++){add(other.data[i]);}}// 初始化函数void init(int s, int max_s){max_size = max_s;size = s;           // 当前数组的最大容量data = new T[size]; // 在堆区申请一个顺序表容器}// 判空函数bool empty(){return len == 0;}// 判满函数bool full(){return size==len;}// 添加数据函数bool add(T e){if (data == NULL){cout << "添加数据失败" << endl;return false;}if (full()){if (len == max_size){cout << "添加数据失败,内存已满" << endl;return false;}expend();}data[len++] = e;cout << "添加数据成功" << endl;return true;}// 求当前顺序表的实际长度int length(){return len;}// 任意位置插入函数bool insert_pos(int pos, T e){if (data == NULL || pos < 0 || pos > len){cout << "插入数据失败" << endl;return false;}if (full()){expend();}for (int i = len - 1; i >= pos; i--){data[i + 1] = data[i];}data[pos] = e;len++;cout << "插入数据成功" << endl;return true;}// 任意位置删除函数bool delete_pos(int pos){if (data == NULL || SeqList::empty() || pos < 0 || pos >= len){cout << "删除数据失败" << endl;return false;}for (int i = pos + 1; i < len; i++){data[i - 1] = data[i];}len--;cout << "删除数据成功" << endl;return true;}// 访问容器中任意一个元素 atT &at(int index){if (data == NULL || SeqList::empty() || index < 0 || index >= len){cout << "访问数据失败" << endl;}return data[index];}// 遍历整个数组输出void show(){if (data == NULL || SeqList::empty()){cout << "遍历数组失败" << endl;return;}cout << "数组中的数据:" << endl;for (int i = 0; i < length(); i++){cout << data[i] << '\t';}cout << endl;}// 君子函数:二倍扩容void expend(){T *temp;size = 2 * size;temp = new T[size];memcpy(temp, data, sizeof(T) * len);free();data = temp;}// 释放函数void free(){delete[] data;data = NULL;cout << "释放空间成功" << endl;}
};int main()
{SeqList<int> L;L.add(1);L.add(2);L.add(3);L.add(4);L.add(5);L.add(6);L.add(6);L.add(6);L.add(99);L.add(99);L.add(99);L.add(99);L.show();L.free();L.show();return 0;
}

结果:

二.思维导图


http://www.ppmy.cn/news/1522194.html

相关文章

使用亚马逊Bedrock的Stable Diffusion XL模型实现文本到图像生成:探索AI的无限创意

引言 什么是Amazon Bedrock&#xff1f; Amazon Bedrock是亚马逊云服务&#xff08;AWS&#xff09;推出的一项旗舰服务&#xff0c;旨在推动生成式人工智能&#xff08;AI&#xff09;在各行业的广泛应用。它的核心功能是提供由顶尖AI公司&#xff08;如AI21 Labs、Anthropic…

Haskell爬虫:连接管理与HTTP请求性能

爬虫技术作为数据抓取的重要手段&#xff0c;其效率和性能直接影响到数据获取的质量与速度。Haskell&#xff0c;作为一种纯函数式编程语言&#xff0c;以其强大的类型系统和并发处理能力&#xff0c;在构建高效爬虫方面展现出独特的优势。本文将探讨在Haskell中如何通过连接管…

美食|基于SpringBoot+vue的美食网站(源码+数据库+文档)

美食网站 基于SSMvue的美食网站 一、前言 二、系统设计 三、系统功能设计 系统功能实现 后台模块实现 管理员模块实现 用户模块实现 餐厅模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&…

深度学习从入门到精通——基于unet++算法实现细胞分割

模型定义 import torch from torch import nn__all__ [UNet, NestedUNet]class VGGBlock(nn.Module):def __init__(self, in_channels, middle_channels, out_channels):super().__init__()self.relu nn.ReLU(inplaceTrue)self.conv1 nn.Conv2d(in_channels, middle_channe…

如何创建训练数据集

在 HuggingFace 上创建数据集非常方便&#xff0c;创建完成之后&#xff0c;通过 API 可以方便的下载并使用数据集&#xff0c;在 Google Colab 上进行模型调优&#xff0c;下载数据集速度非常快&#xff0c;本文通过 Dataset 库创建一个简单的训练数据集。 首先安装数据集依赖…

黑马JavaWeb开发笔记14——Tomcat(介绍、安装与卸载、启动与关闭)、入门程序解析(起步依赖、SpringBoot父工程、内嵌Tomcat)

文章目录 前言一、Web服务器-Tomcat1. 简介1.1服务器概述1.2 Web服务器1.3 Tomcat 2. 基本使用2.1 下载2.2 安装与卸载2.3 启动与关闭2.4 常见问题 二、入门程序解析1. 起步依赖2. SpringBoot父工程3. 内嵌Tomcat 总结 前言 本篇文章是2023年最新黑马JavaWeb开发笔记14&#x…

高级java每日一道面试题-2024年9月03日-JVM篇-怎么判断对象是否可以被回收?

如果有遗漏,评论区告诉我进行补充 面试官: 怎么判断对象是否可以被回收? 我回答: 在Java中&#xff0c;判断一个对象是否可以被垃圾回收器&#xff08;Garbage Collector, GC&#xff09;回收&#xff0c;主要涉及到Java的内存管理和垃圾回收机制。Java采用自动内存管理机制…

【网络安全】IIS未授权访问敏感数据

未经许可,不得转载。 文章目录 正文攻击方法正文 IIS 是 Internet Information Services 的缩写,是微软开发的一个基于 Windows 的 Web 服务器。 HAProxy 是一个知名的高性能负载均衡器和代理服务器。它通常用于将流量分发到多个后端服务器,常与 Web 服务器(包括 IIS)一…

C# 特性与属性的区别

在 C# 中&#xff0c;"特性"&#xff08;Attribute&#xff09;和"属性"&#xff08;Property&#xff09;是两种不同的概念&#xff0c;它们在编程中扮演不同的角色&#xff1a; 属性&#xff08;Property&#xff09;&#xff1a; 属性是类或结构的一部分…

生成对抗网络在数字病理学中的应用综述|文献精析·24-09-03

小罗碎碎念 本期推文主题&#xff1a;生成对抗网络 今天这篇推文于2024年发表于《Mod Pathol》&#xff0c;目前IF7.1&#xff0c;属于医学和病理学的一区文章。 作者角色姓名单位名称&#xff08;中文&#xff09;第一作者Shahd A. Alajaji马里兰大学牙科学院口腔医学与诊断科…

硬刚苹果还得是华为

文&#xff5c;琥珀食酒社 作者 | 璇子 牛皮啊 华为发三折叠不意外 意外的是 这各种翻转简直颠覆想象 市面上没见过这么能“翻转”的&#xff1f; 要不怎么说硬刚苹果 还得看华为 就跟你同天怎么了&#xff1f; 拼创新、拼技术、拼热度 你就说哪比你差吧&#xff1f…

[建模已更新]2024数学建模国赛高教社杯A题:“板凳龙” 闹元宵 思路代码文章助攻手把手保姆级

本系列专栏将包括两大块内容 第一块赛前真题和模型教学,包括至少8次真题实战教学,每期教学专栏的最底部会提供完整的资料百度网盘包括:真题、数据、可复现代码以及文章. 第二块包括赛中详细思路建模、代码的参考助攻, 会提供2024年高教社国赛A的全套参考内容(一般36h内更新完毕…

孤儿进程、僵尸进程、守护进程(精灵进程)

目录 一、孤儿进程 二、僵尸进程 三、守护进程&#xff08;精灵进程&#xff09; 一、孤儿进程 定义&#xff1a;孤儿进程是指那些其父进程已经结束&#xff0c;但它们依然在运行的进程 创建一个孤儿进程&#xff1a; #include <stdio.h> #include <stdlib.h> #in…

dockerfile部署fastapi项目

dockerfile部署fastapi项目 1、Dockerfile # 使用Python官方镜像作为基础镜像 FROM python:3.8-slim# 更新apt-get源并安装依赖 # RUN apt-get update -y && apt-get install -y git# 设置环境变量 ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1# 创建工作目…

Python--列表简介

列表是什么 列表让你能够在⼀个地方存储成组的信息&#xff0c;其中既可以只包含几个元素&#xff0c;也可以包含数百万个元素。列表是新手可直接使用的最强大的Python 功能之⼀。 列表&#xff08;list&#xff09;是一种可变的序列类型&#xff0c;用于存储一系列有序的元素…

【全网首发】2024数学建模国赛C题39页word版成品论文【附带py+matlab双版本解题代码+可视化图表】

基于优化模型的农作物的种植策略 完整版成品py&#xff08;matlab&#xff09;代码解题在下面获取&#xff1a; 点击链接加入群聊【2024数学建模国赛资料汇总】&#xff1a;http://qm.qq.com/cgi-bin/qm/qr?_wv1027&klZncBILk30DuPRI1Bd8X-3Djv7ZVZyAv&authKeykKqNSS…

久久派安装启用USB摄像头(基于node-red)

久久派安装启用USB摄像头&#xff08;基于node-red&#xff09; 功能演示1、安装必要的节点2、程序讲解1、启动摄像头2、关闭摄像头3、获取久久派IP4、在UI界面显示摄像头内容5、摄像头抓拍 3、部署 文中所需网盘资料及讲解视频在文章末尾哦1。 本章使用的摄像头插件请参考久久…

4、Django Admin对自定义的计算字段进行排序

通常&#xff0c;Django会为模型属性字段&#xff0c;自动添加排序功能。当你添加计算字段时&#xff0c;Django不知道如何执行order_by&#xff0c;因此它不会在该字段上添加排序功能。 如果要在计算字段上添加排序&#xff0c;则必须告诉Django需要排序的内容。你可以通过在…

Qt/C++ 个人开源项目#串口助手(源码与发布链接)

一、项目概述 该串口助手工具基于Qt/C开发&#xff0c;专为简化串口通信调试与开发而设计&#xff0c;适合新手快速上手。工具具有直观的用户界面和丰富的功能&#xff0c;旨在帮助用户与串口设备建立可靠通信&#xff0c;便于调试、数据传输和分析。 二、主要功能 波特率&a…

Flutter集成Firebase中的 A/B Testing

前提 完成Flutter集成Firebase中的远程配置流程 A/B Test的使用流程 我们先通过远程配置设置变量&#xff0c;应用程序根据变量值展示不同的界面创建一个A/B Test实验&#xff0c;在实验中创建满足条件的用户才能加入到这个实验中&#xff0c;并且在A/B 实验中修改远程配置变…