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

C++——清明

 

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
#include <ctime>using namespace std;class Weapon; // 前置声明class Hero{
private:int hp;int atk;int def;int spd;string job;  // 新增职业属性public:Hero(int h=0, int a=0, int d=0, int s=0, string j="Warrior"): hp(h), atk(a), def(d), spd(s), job(j){}void setAtk(int a) { atk = a; }void setDef(int d) { def = d; }void setSpd(int s) { spd = s; }void setHp(int h) { hp = h; }void setJob(string j) { job = j; }int getAtk() { return atk; }int getDef() { return def; }int getSpd() { return spd; }int getHp() { return hp; }string getJob() { return job; }void equipWeapon(Weapon* w);
};class Weapon{
private:int atk;public:Weapon(int atk = 1) : atk(atk) {}void setAtk(int a) { atk = a; }int getAtk() { return atk; }// 根据武器类型的不同,英雄获得不同的属性virtual void getAttr(Hero& hero) {int new_atk = hero.getAtk() + atk;hero.setAtk(new_atk);}virtual void purl_virtual_func() = 0;virtual string getType() = 0;  // 新增获取武器类型
};class Sword : public Weapon {
private:int hp;public:Sword(int atk = 1, int hp = 1): Weapon(atk), hp(hp) {}void setHp(int h) { hp = h; }int getHp() { return hp; }virtual void getAttr(Hero& hero) {Weapon::getAttr(hero);int new_hp = hero.getHp() + hp;hero.setHp(new_hp);}void purl_virtual_func() {}string getType() override {return "Sword";}
};class Blade : public Weapon {
private:int spd;public:Blade(int atk = 1, int spd = 1): Weapon(atk), spd(spd) {}void setSpd(int s) { spd = s; }int getSpd() { return spd; }virtual void getAttr(Hero& hero) {Weapon::getAttr(hero);int new_spd = hero.getSpd() + spd;hero.setSpd(new_spd);}void purl_virtual_func() {}string getType() override {return "Blade";}
};class Monster {
private:int hp;int atk;public:Monster(int h = 50, int a = 10) : hp(h), atk(a) {}int getHp() { return hp; }int getAtk() { return atk; }// 怪物死亡时掉落武器Weapon* die(Hero& hero) {srand(time(0));  // 初始化随机种子string job = hero.getJob();// 根据英雄的职业掉落不同的武器if (job == "Warrior") {return new Sword(10, 20);  // 战士掉落剑,增加攻击力和生命值} else if (job == "Rogue") {return new Blade(8, 15);  // 盗贼掉落短剑,增加攻击力和速度} else {// 默认掉落短剑return new Blade(5, 10);  // 其他职业掉落短剑}}
};void Hero::equipWeapon(Weapon* w) {w->getAttr(*this);
}int main(int argc, const char** argv) {Hero hero(100, 15, 10, 5, "Warrior");  // 创建一个战士Monster monster(50, 10);  // 创建一个怪物cout << "Hero HP: " << hero.getHp() << " Attack: " << hero.getAtk() << endl;// 英雄击败怪物,掉落武器Weapon* droppedWeapon = monster.die(hero);// 英雄装备掉落的武器hero.equipWeapon(droppedWeapon);cout << "After defeating the monster and equipping dropped weapon:" << endl;cout << "Hero HP: " << hero.getHp() << " Attack: " << hero.getAtk() << endl;delete droppedWeapon;  // 清理掉落的武器return 0;
}

#include <iostream>
using namespace std;template <typename T>
class list {
public:struct Node {T val;Node* next;Node* prev;Node(const T& value) : val(value), next(nullptr), prev(nullptr) {}};list() : head(nullptr), tail(nullptr) {}~list() {clear();}void push_back(const T& value) {Node* newNode = new Node(value);if (!tail) {head = tail = newNode;  // 如果链表为空,新节点既是头节点又是尾节点} else {tail->next = newNode;   // 将当前尾节点的 next 指向新节点newNode->prev = tail;   // 新节点的 prev 指向当前尾节点tail = newNode;         // 更新尾节点为新节点}}friend ostream& operator<<(ostream& os, const list<T>& lst) {Node* current = lst.head;while (current) {os << current->val << " ";current = current->next;}return os;}T& operator[](size_t index) {Node* current = head;size_t count = 0;while (current && count < index) {current = current->next;count++;}if (!current) {throw out_of_range("Index out of range");}return current->val;}void clear() {Node* current = head;while (current) {Node* nextNode = current->next;delete current;  // 删除当前节点current = nextNode;}head = tail = nullptr;  // 清空头尾指针}
private:Node* head;  // 记录链表头节点Node* tail;  // 记录链表尾节点
};
int main() {list<int> myList;myList.push_back(10);myList.push_back(20);myList.push_back(30);cout << "List: " << myList << endl;try {cout << "Element at index 1: " << myList[1] << endl;cout << "Element at index 5: " << myList[5] << endl;  // 会抛出异常} catch (const out_of_range& e) {cout << e.what() << endl;}return 0;
}

C语言

 C++

 

相关文章:

C++——清明

#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory> #include <ctime>using namespace std;class Weapon; // 前置声明class Hero{ pr…...

Unity ViewportConstraint

一、组件功能概述 ViewportConstraint是一个基于世界坐标的UI边界约束组件&#xff0c;主要功能包括&#xff1a; 将UI元素限制在父容器范围内支持自定义内边距&#xff08;padding&#xff09;可独立控制水平和垂直方向的约束 二、实现原理 1. 边界计算&#xff08;世界坐…...

Gin、Echo 和 Beego三个 Go 语言 Web 框架的核心区别及各自的优缺点分析,结合其设计目标、功能特性与适用场景

1. Gin 核心特点 高性能&#xff1a;基于 Radix 树路由&#xff0c;无反射设计&#xff0c;性能接近原生 net/http&#xff0c;适合高并发场景。轻量级&#xff1a;仅提供路由、中间件、请求响应处理等基础功能&#xff0c;依赖少。易用性&#xff1a;API 设计简洁直观&#…...

ffmpeg视频转码相关

ffmpeg视频转码相关 简介参数 实战举栗子获取视频时长视频转码mp4文件转为hls m3u8 ts等文件图片转视频抽取视频第一帧获取基本信息 转码日志输出详解转码耗时测试 简介 FFmpeg 是领先的多媒体框架&#xff0c;能够解码、编码、 转码、复用、解复用、流、过滤和播放 几乎所有人…...

手搓多模态-06 数据预处理

前情回顾 我们目前实现了视觉模型的编码器部分&#xff0c;然而&#xff0c;我们所做的是把一张图片编码嵌入成了许多个上下文相关的嵌入向量&#xff0c;然而我们期望的是一张图片用一个向量来表示&#xff0c;从而与文字的向量做点积形成相似度&#xff08;参考手搓多模态-01…...

HCIP【路由过滤技术(详解)】

目录 1 简介 2 路由过滤方法 3 路由过滤工具 3.1 静默接口 3.2 ACL 3.3 地址前缀列表 3.4 filter-policy 3.4.1 filter-policy过滤接收路由&#xff08;以RIP为例&#xff09; 3.4.2 filter-policy过滤接收路由&#xff08;以OSPF为例&#xff09; 1 简介 路由过滤技术…...

【Kafka基础】topics命令行操作大全:高级命令解析(2)

1 强制删除主题 /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --delete \--zookeeper 192.168.10.33:2181 \--topic mytopic \--if-exists 参数说明&#xff1a; --zookeeper&#xff1a;直接连接Zookeeper删除&#xff08;旧版本方式&#xff09;--if-exists&…...

【AI插件开发】Notepad++ AI插件开发实践(代码篇):从Dock窗口集成到功能菜单实现

一、引言 上篇文章已经在Notepad的插件开发中集成了选中即问AI的功能&#xff0c;这一篇文章将在此基础上进一步集成&#xff0c;支持AI对话窗口以及常见的代码功能菜单&#xff1a; 显示AI的Dock窗口&#xff0c;可以用自然语言向 AI 提问或要求执行任务选中代码后使用&…...

Vue3在ZKmall开源商城前端的应用实践与技术创新

ZKmall开源商城作为一款企业级电商解决方案&#xff0c;其前端架构基于Vue3实现了高效、灵活的开发模式&#xff0c;结合响应式设计、组件化开发与全链路性能优化&#xff0c;为多端协同和复杂业务场景提供了先进的技术支持。以下从技术架构、核心特性、性能优化等维度解析Vue3…...

SpringAI+MCP协议 实战

文章目录 前言快速实战Spring AISpring AI 集成 MCP 协议Spring Mcp Client 示例Spring Mcp Server 示例 前言 尽管Python最近成为了编程语言的首选&#xff0c;但是Java在人工智能领域的地位同样不可撼动&#xff0c;得益于强大的Spring框架。随着人工智能技术的快速发展&…...

[数据结构]图krusakl算法实现

目录 Kruskal算法 Kruskal算法 我们要在连通图中去找生成树 连通图&#xff1a;在无向图中&#xff0c;若从顶点v1到顶点v2有路径&#xff0c;则称顶点v1与顶点v2是连通的。如果图中任意一对顶点都是连通的&#xff0c;则称此图为连通图。 生成树&#xff1a;一个连通图的最小…...

SQL122 删除索引

alter table examination_info drop index uniq_idx_exam_id; alter table examination_info drop index full_idx_tag; 描述 请删除examination_info表上的唯一索引uniq_idx_exam_id和全文索引full_idx_tag。 后台会通过 SHOW INDEX FROM examination_info 来对比输出结果。…...

QEMU学习之路(5)— 从0到1构建Linux系统镜像

QEMU学习之路&#xff08;5&#xff09;— 从0到1构建Linux系统镜像 一、前言 参考&#xff1a;从内核到可启动镜像&#xff1a;0到1构建你的极简Linux系统 二、linux源码获取 安装编译依赖 sudo apt install -y build-essential libncurses-dev flex bison libssl-dev li…...

node ---- 解决错误【Error: error:0308010C:digital envelope routines::unsupported】

1. 报错 在 Node.js 18.18.0 的版本中&#xff0c;遇到以下错误&#xff1a; this[kHandle] new _Hash(algorithm, xofLen);^ Error: error:0308010C:digital envelope routines::unsupported这个错误通常发生在运行项目或构建时&#xff0c;尤其是在使用 Webpack、Vite 或其他…...

蓝桥杯——走迷宫问题(BFS)

这是一个经典的BFS算法 1. BFS算法保证最短路径 核心机制&#xff1a;广度优先搜索按层遍历所有可能的路径&#xff0c;首次到达终点的路径长度即为最短步数。这是BFS的核心优势。队列的作用&#xff1a;通过队列按先进先出的顺序处理节点&#xff0c;确保每一步探索的都是当…...

详解 Redis repl_backlog_buffer(如何判断增量同步)

一、repl_backlog_buffer 复制积压缓冲区&#xff08;Replication Backlog Buffer&#xff09; 是一个环形内存区域&#xff08;Ring Buffer&#xff09;&#xff0c;用于临时保存主节点最近写入的写命令&#xff0c;以支持从节点断线重连后的增量同步。 1.1 三个复制偏移量 …...

服务器虚拟化技术深度解析:医药流通行业IT架构优化指南

一、服务器虚拟化的定义与原理 &#xff08;一&#xff09;技术定义&#xff1a;从物理到虚拟的资源重构 服务器虚拟化是通过软件层&#xff08;Hypervisor&#xff09;将物理服务器的CPU、内存、存储、网络等硬件资源抽象为逻辑资源池&#xff0c;分割成多个相互隔离的虚拟机…...

使用PyTorch实现ResNet:从残差块到完整模型训练

ResNet&#xff08;残差网络&#xff09;是深度学习中的经典模型&#xff0c;通过引入残差连接解决了深层网络训练中的梯度消失问题。本文将从残差块的定义开始&#xff0c;逐步实现一个ResNet模型&#xff0c;并在Fashion MNIST数据集上进行训练和测试。 1. 残差块&#xff08…...

Scala相关知识学习总结5

1、多维数组 定义&#xff1a; val arr Array.ofDim[Double](3,4) 表示二维数组中有三个一维数组&#xff0c;每个一维数组有四个元素。 2、列表 List 不可变 List&#xff1a;默认不可变&#xff0c;可创建有序且可重复的列表&#xff0c;可使用:从右向左增加数据&#xf…...

Day1:前端项目uni-app壁纸实战

uni-app官网下载HBuilder。 uni-app快速上手 | uni-app官网 点击HBuilder 安装 新建项目 工具——插件安装 安装uni-app&#xff08;vue3&#xff09; 我们先来准备一下&#xff1a; 先在wallpaper下新建目录 我已经建过了 同样&#xff0c;再在common下建images和style目录&…...

光谱相机的光谱数据采集原理

光谱相机的光谱数据采集原理基于‌分光技术‌和‌光电信号转换‌&#xff0c;通过将入射光按波长分解并记录各波段的强度信息&#xff0c;最终生成包含空间和光谱维度的数据立方体。以下是详细原理分解&#xff1a; ‌1. 分光技术&#xff1a;将复合光分解为单色光‌ 光谱相机…...

《算法笔记》10.3小节——图算法专题->图的遍历 问题 A: 第一题

题目描述 该题的目的是要你统计图的连通分支数。 输入 每个输入文件包含若干行&#xff0c;每行两个整数i,j&#xff0c;表示节点i和j之间存在一条边。 输出 输出每个图的联通分支数。 样例输入 1 4 4 3 5 5样例输出 2 分析&#xff1a; 由于题目没给出范围&#xff0…...

python中的{}

注意&#xff0c;如果要创建空集合&#xff0c;只能使用 set() 函数实现。因为直接使用一对 {}&#xff0c;Python 解释器会将其视为一个空字典。 Python中集合set和字典dict的用法区别_python创建set变量和dict区别-CSDN博客...

宏碁笔记本电脑擎7PRO搭载的 NVIDIA RTX 5080 显卡安装pytorch

宏碁笔记本电脑擎7PRO搭载的 NVIDIA RTX 5080 显卡是一款高性能移动 GPU&#xff0c;基于 NVIDIA 最新的 Blackwell 架构设计&#xff0c;通过修正架构&#xff08;Blackwell&#xff09;、显存类型与带宽&#xff08;GDDR7、960GB/s&#xff09;、Tensor Core 与 RT Core 全面…...

html+css+js 实现一个贪吃蛇小游戏

目录 游戏简介 游戏功能与特点 如何玩转贪吃蛇 游戏设计与实现 HTML结构 JavaScript核心实现 代码结构&#xff1a; 效果 关于“其他游戏” 游戏简介 贪吃蛇是一款经典的单人小游戏&#xff0c;玩家通过控制蛇的移动&#xff0c;吃掉食物来增加长度&#xff0c;避免撞…...

淘宝按图搜索商品(拍立淘)API接口解析

以下是关于淘宝按图搜索商品&#xff08;拍立淘&#xff09;API的深度解析指南&#xff0c;结合官方文档和开发者经验整理&#xff0c;包含调用方法、参数详解、返回结果解析及常见问题处理&#xff1a; 一、API核心接口说明 1. 接口名称 官方接口&#xff1a;taobao.image.…...

Python爬虫生成CSV文件的完整流程

引言 在当今数据驱动的时代&#xff0c;网络爬虫已成为获取互联网数据的重要工具。Python凭借其丰富的库生态系统和简洁的语法&#xff0c;成为了爬虫开发的首选语言。本文将详细介绍使用Python爬虫从网页抓取数据并生成CSV文件的完整流程&#xff0c;包括环境准备、网页请求、…...

21.OpenCV获取图像轮廓信息

OpenCV获取图像轮廓信息 在计算机视觉领域&#xff0c;识别和分析图像中的对象形状是一项基本任务。OpenCV 库提供了一个强大的工具——轮廓检测&#xff08;Contour Detection&#xff09;&#xff0c;它能够帮助我们精确地定位对象的边界。这篇博文将带你入门 OpenCV 的轮廓…...

医学图像分割效率大幅提升!U-Net架构升级,助力精度提升5%!

在医学图像分割领域&#xff0c;U-Net模型及其变体的创新应用正在带来显著的性能提升和效率优化。最新研究显示&#xff0c;通过引入结构化状态空间模型&#xff08;SSM&#xff09;和轻量级LSTM&#xff08;xLSTM&#xff09;等技术&#xff0c;VMAXL-UNet模型在多个医学图像数…...

智能设备运行监控系统

在工业 4.0 与智能制造浪潮下&#xff0c;设备运行效率与稳定性成为企业竞争力的核心要素。然而&#xff0c;传统设备管理模式面临数据采集分散、状态分析滞后、维护成本高昂等痛点。为破解这些难题&#xff0c;设备运行监控系统应运而生&#xff0c;通过融合智能传感、5G 通信…...