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

C++....................4

1.

using namespace std;                 class mystring {
private:char* p;int len;// 辅助函数:复制字符串void copy(const char* source) {len = strlen(source);p = new char[len + 1];strcpy(p, source);}// 辅助函数:释放内存void release() {if (p) {delete[] p;}}public:// 构造函数mystring(const char* s = "") {copy(s);}// 拷贝构造函数mystring(const mystring& other) {copy(other.p);}// 析构函数~mystring() {release();}// 赋值运算符重载mystring& operator=(const mystring& other) {if (this != &other) {release();copy(other.p);}return *this;}// 加法运算符重载mystring operator+(const mystring& other) const {char* temp = new char[len + other.len + 1];strcpy(temp, p);strcat(temp, other.p);mystring result(temp);delete[] temp;return result;}// 复合赋值运算符重载mystring& operator+=(const mystring& other) {char* temp = new char[len + other.len + 1];strcpy(temp, p);strcat(temp, other.p);release();copy(temp);delete[] temp;return *this;}// 下标运算符重载char& operator[](int index) {
#include <cstring>return p[index];}// 输出字符串void show() const {cout << p << endl;}
};int main() {mystring str = "hello";mystring ptr = "world";str.show();ptr.show();str = str + ptr;str.show();str += ptr;str.show();str[0] = 'H';str.show();return 0;
}

2.

// 定义消息结构体
struct buf{long mtype;       // 消息类型,用于区分不同的频道char mtext[1024]; // 消息内容
};// 定义 Channel 类,用于表示消息队列中的特定频道
class Channel {
private:int msgid;long channel;public:Channel(int id, long ch) : msgid(id), channel(ch) {}// 发送消息到指定频道void send(const std::string& data) {buf message;message.mtype = channel;strncpy(message.mtext, data.c_str(), sizeof(message.mtext) - 1);message.mtext[sizeof(message.mtext) - 1] = '\0';if (msgsnd(msgid, &message, strlen(message.mtext) + 1, 0) == -1) {perror("msgsnd");}}// 从指定频道读取消息std::string read(int size) {buf message;if (msgrcv(msgid, &message, size, channel, 0) == -1) {perror("msgrcv");return "";}return std::string(message.mtext);}
};// 定义 Msg 类,用于封装消息队列的操作
class Msg {
private:key_t key;int msgid;public:// 构造函数,根据文件名生成消息队列的键值并创建消息队列Msg(const std::string& filename) {key = ftok(filename.c_str(), 'a');if (key == -1) {perror("ftok");}msgid = msgget(key, IPC_CREAT | 0666);if (msgid == -1) {perror("msgget");}}// 重载 [] 运算符,返回指定频道的 Channel 对象Channel operator[](long channel) {return Channel(msgid, channel);}
};int main() {// 创建 Msg 对象,指定文件名Msg m("o.txt");// 向 1 号频道发送消息m[1].send("Hello, World!");// 从 1 号频道读取消息std::string str = m[1].read(1024);std::cout << "1号频道: " << str << std::endl;return 0;
}

3.

class Sem {
private:key_t key;int id;// 辅助函数:执行信号量操作void do_semop(int sem_num, int sem_op) {struct sembuf sops = {static_cast<unsigned short>(sem_num), static_cast<short>(sem_op), 0};if (::semop(id, &sops, 1) == -1) {  // 使用 ::semop 调用系统函数throw std::runtime_error("semop failed");}}public:// 构造函数:创建信号灯集,信号灯集中存在 x 个信号量,并且将所有信号量初始化为 ySem(int num_semaphores, int initial_value) {key = ftok(".", 'a');if (key == -1) {throw std::runtime_error("ftok failed");}id = semget(key, num_semaphores, IPC_CREAT | 0666);if (id == -1) {throw std::runtime_error("semget failed");}for (int i = 0; i < num_semaphores; ++i) {if (semctl(id, i, SETVAL, initial_value) == -1) {throw std::runtime_error("semctl failed");}}}// 手动初始化信号灯集中的第 index 个信号量,初始化成 valuevoid init(int index, int value) {if (semctl(id, index - 1, SETVAL, value) == -1) {throw std::runtime_error("semctl failed");}}// 重载 [] 运算符,返回一个可用于操作信号量的对象class SemProxy {private:Sem& sem;int index;public:SemProxy(Sem& s, int idx) : sem(s), index(idx - 1) {}// 重载 + 和 - 运算符,让信号灯集中的第 index 个信号量的值增加或减少SemProxy& operator+(int val) {sem.do_semop(index, val); return *this;}SemProxy& operator-(int val) {sem.do_semop(index, -val); return *this;}};SemProxy operator[](int index) {return SemProxy(*this, index);}// 析构函数:删除信号灯集~Sem() {if (semctl(id, 0, IPC_RMID) == -1) {std::cerr << "Warning: semctl IPC_RMID failed" << std::endl;}}
};int main() {try {// 创建信号灯集,包含 2 个信号量,初始值都为 5Sem s(2, 5);// 手动初始化信号灯集中的第 1 个信号量,初始化成 10s.init(1, 10);// 让信号灯集中的第 1 个信号量的值 +1s[1] + 1;// 让信号灯集中的第 1 个信号量的值 -1s[1] - 1;std::cout << "信号量操作成功" << std::endl;} catch (const std::exception& e) {std::cerr << "Error: " << e.what() << std::endl;}return 0;

相关文章:

C++....................4

1. using namespace std; class mystring { private:char* p;int len;// 辅助函数&#xff1a;复制字符串void copy(const char* source) {len strlen(source);p new char[len 1];strcpy(p, source);}// 辅助函数&#xff1a;释放内存void release() {if (…...

机场导航系统有哪些功能?精准定位与高效路径规划技术深度剖析

本文专为关注机场服务优化、乘客体验提升的IT技术员及航空业同仁而写。将深入探讨机场室内导航系统的核心功能&#xff0c;旨在解决乘客在机场内部定位、路径规划、服务寻找等方面的痛点。如需获取机场导航系统解决方案可前往文章最下方获取&#xff0c;如有项目合作及技术交流…...

医疗AI领域中GPU集群训练的关键技术与实践经验探究(上)

医疗AI领域中GPU集群训练的关键技术与实践经验探究(上) 一、引言 1.1 研究背景与意义 在科技飞速发展的当下,医疗 AI 作为人工智能技术与医疗领域深度融合的产物,正引领着医疗行业的深刻变革。近年来,医疗 AI 在疾病诊断、药物研发、健康管理等诸多方面取得了显著进展,…...

STM32-智能小车项目

项目框图 ST-link接线 实物图&#xff1a; 正面&#xff1a; 反面&#xff1a; 相关内容 使用L9110S电机模块 电机驱动模块L9110S详解 | 良许嵌入式 一、让小车动起来 新建文件夹智能小车项目 在里面复制19-串口打印功能 重命名为01-让小车动起来 新建文件夹motor&…...

Qt基础之四十九:Qt属性系统(Property System)

Qt提供了一个复杂的属性系统,类似于一些编译器供应商提供的属性系统。然而,作为一个独立于编译器和平台的库,Qt不依赖于__property或[property]等非标准编译器功能。Qt解决方案适用于Qt支持的每个平台上的任何标准C++编译器。它基于元对象系统(Meta-Object System),该系统…...

Java 中的泛型讲解与使用(超全详解)

Java 中的泛型&#xff08;超全详解&#xff09; 在 Java 编程中&#xff0c;泛型是一种强大的特性&#xff0c;它允许我们编写可以处理多种数据类型的代码&#xff0c;从而提高代码的复用性和安全性。本文将对 Java 中的泛型进行超全详解&#xff0c;包括泛型的基本概念、基本…...

星环科技推出DeepSeek全场景解决方案:即开即用、企业级部署、端侧智能三位一体

星环科技&#xff08;688031.SH&#xff09;正式发布DeepSeek全场景解决方案&#xff0c;全面覆盖个人用户、企业客户及行业场景需求&#xff0c;为用户提供从个人到企业、从云端到本地的全方位AI应用支持&#xff0c;为不同需求的用户提供了灵活、高效且安全的AI解决方案。 省…...

《全星质量管理 QMS 软件系统》:赋能企业高效质量管理

《全星质量管理 QMS 软件系统》&#xff1a;赋能企业高效质量管理 在当今竞争激烈的商业环境中&#xff0c;《全星质量管理 QMS 软件系统》脱颖而出&#xff0c;展现出了显著且无可比拟的应用优势。 首先&#xff0c;《全星质量管理 QMS 软件系统》犹如一张严密的质量管控大网…...

[分披萨]

分批萨 真题目录: 点击去查看 E 卷 100分题型 题目描述 "吃货"和"馋嘴"两人到披萨店点了一份铁盘(圆形)披萨,并嘱咐店员将披萨按放射状切成大小相同的偶数个小块。但是粗心的服务员将披萨切成了每块大小都完全不同奇数块,且肉眼能分辨出大小。 由于两…...

【CSS】HTML元素布局基础总结

HTML默认布局和元素显示 CSS 元素显示 { HTML 默认布局&#xff1a; 流式布局 { 从左到右&#xff0c;从上到下 随页面宽度变化动态排列元素 文档流&#xff1a;整个 H T M L 文档的流式布局 HTML 元素分为 { 块级元素 &#xff1a;默认占满一行 行内元素 &#xff1a;在行内最…...

JSON Web Token在登陆中的使用

JWT&#xff08;JSON Web Token&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在网络应用环境间安全地传递声明。它的主要用途是身份验证和信息交换。在微服务架构中&#xff0c;JWT 作为认证机制非常常见&#xff0c;特别是与 API 网关结合使用…...

吐血整理:在 Docker 中运行 Milvus

直接用docker 错误命令&#xff08;这个我试了三遍&#xff0c;浪费了很多时间&#xff09;&#xff1a; docker run -d --name milvus -p 19530:19530 -p 9091:9091 -v /var/lib/milvus:/var/lib/milvus milvusdb/milvus:latest 先看报错&#xff1a; 2025-02-24 16:02:39 …...

【多模态处理篇三】【DeepSeek语音合成:TTS音色克隆技术揭秘】

最近帮某明星工作室做AI语音助手时遇到魔幻需求——要求用5秒的咳嗽声克隆出完整音色!传统TTS系统直接翻车,生成的语音像得了重感冒的电音怪物。直到祭出DeepSeek的TTS音色克隆黑科技,才让AI语音从"机器朗读"进化到"声临其境"。今天我们就来扒开这个声音…...

C++Qt学习笔记——实现一个串口通信界面

CQt学习笔记——实现一个串口通信界面 一.界面二、项目结构三、头文件1. 文件头部2. 类定义3. 构造函数和析构函数4. 成员函数5. 成员变量 四、代码解析ReceiveAeraInit 函数解析SerialHelper 构造函数解析1. 为什么有两个 SerialHelper&#xff1f;2. 为什么用 :: 和 :&#x…...

Word(2010)排版技巧

设置标题样式 选择需要设置的标题 如下图所示。选择文字后&#xff0c;点击对应的样式即可设置。 设置标题格式 设置字体格式 设置段落格式 显示所有样式 标题样式展示 建议 建议新建一个正文样式&#xff0c;可以命名为正文1&#xff0c;因为所有的样式参考的“样式基准…...

一.Vue中的条件渲染

1.在<head>中引用 <script src"https://unpkg.com/vue3/dist/vue.global.js"></script> 2.在<body>中写入 <div id"app"><p><a v-if "user.usernameadmin"href"#">编辑</a><a …...

IO进程 day05

IO进程 day05 9. 进程9. 9. 守护进程守护进程的特点守护进程创建步骤 10. 线程10.1. 线程的概念10.2. 进程和线程的区别10.2. 线程资源10.3. 线程的函数接口1. pthread_create-创建线程线程函数和普通函数的区别 2. pthread_exit3.线程资源回收函数join和detach的区别 获取线程…...

【HeadFirst系列之HeadFirstJava】第6天之认识Java的API:解锁高效开发的钥匙

认识Java的API&#xff1a;解锁高效开发的钥匙 在《Head First Java》的第六章节中&#xff0c;作者深入探讨了Java的API&#xff08;Application Programming Interface&#xff09;&#xff0c;并强调了它在Java开发中的重要性。Java API 是Java开发工具包&#xff08;JDK&a…...

4 - AXI GPIO按键控制LED实验

文章目录 1 实验任务2 系统框图3 软件设计 1 实验任务 本实验任务是通过调用PL端AXI GPIO IP核&#xff0c;使用中断机制&#xff0c;实现PL端按键控制 PS端LED的功能。 2 系统框图 3 软件设计 注意事项&#xff1a; AXI GPIO IP核是双沿触发中断&#xff0c;不可设置&…...

题海拾贝:扫雷

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、题…...

Deepseek本地部署小实践(c盘)

目录 前言 一、安装ollama 二、打开终端执行run 三、可视化 前言 小鲸鱼出来以后看到很多大佬本地部署AI&#xff0c;自己也想试一试&#xff0c;第一次部署AI&#xff0c;选了一个简单的办法&#xff0c;实践一下&#xff0c;写得比较粗糙。 一、安装ollama 先简单的介绍…...

详细解析d3dx9_27.dll丢失怎么办?如何快速修复d3dx9_27.dll

运行程序时提示“d3dx9_27.dll文件缺失”&#xff0c;通常由DirectX组件损坏或文件丢失引起。此问题可通过系统化修复方法解决&#xff0c;无需重装系统或软件。下文将详细说明具体步骤及注意事项。 一.d3dx9_27.dll缺失问题的本质解析 当系统提示“d3dx9_27.dll丢失”时&…...

【LeetCode刷题之路】leetcode155.最小栈

LeetCode刷题记录 &#x1f310; 我的博客主页&#xff1a;iiiiiankor&#x1f3af; 如果你觉得我的内容对你有帮助&#xff0c;不妨点个赞&#x1f44d;、留个评论✍&#xff0c;或者收藏⭐&#xff0c;让我们一起进步&#xff01;&#x1f4dd; 专栏系列&#xff1a;LeetCode…...

矩阵乘积态简介

定义 矩阵乘积态&#xff08;Matrix Product State, MPS&#xff09;是一种用于表示量子多体系统的强大工具&#xff0c;特别是在一维系统中。MPS 是一种张量网络状态&#xff0c;它通过将全局量子态分解为一系列局部张量的乘积来有效地表示量子态。 注释&#xff1a; 量子态表…...

Oracle数据库分区自动删除

说明&#xff1a; 该存储过程部署后&#xff0c;设置成定时任务&#xff0c;每天执行。 每次执行删除partition_position 2的分区&#xff0c;删除之后&#xff0c;partition_position 3的分区会前移到partition_position 为 2; CREATE OR REPLACE PROCEDURE BILL_CENT_JI…...

华三交换机S5560 NQA测试

文章目录 NQA配置介绍实验说明 NQA配置介绍 NQA配置 nqa entry admin testtype icmp-echo //配置NQA类型destination ip 10.1.0.1 //配置探测的目的IPsource ip 10.1.0.2 //配置探测的源IPfrequency 6000 //配置探测的时间history-record enable //历史探测记录…...

Vue全局变量的定义和使用,创建 Store变量、读取、修改

在VUE中&#xff0c;当需要各js、各页面都能读写的全局变量时&#xff0c;可以用store变量&#xff0c;从定义到使用的方法如下 一&#xff0e;定义变量&#xff0c;例&#xff1a;我们定一个全局变量gxh 找到 vue的/ src/ store路径, 在 modules文件夹下创建文件gvar.js 在…...

基于Docker的前端环境管理:从开发环境到生产部署的实现方案

# 基于Docker的前端环境管理&#xff1a;从开发环境到生产部署的实现方案 简介及前端开发环境挑战 简介 是一种容器化平台&#xff0c;可以将应用程序及其依赖项打包为一个容器&#xff0c;提供一种轻量级、可移植的环境。它能够简化开发、部署和运维的流程&#xff0c;提高…...

单片机延时函数怎么写规范?

我们以前在开发产品的时候&#xff0c;肯定会碰到一些延时需求&#xff0c;比如常见的LED闪烁&#xff0c;按键消抖&#xff0c;控制IO口输出时序等等。 别小看延时&#xff0c;这个小问题&#xff0c;想做好&#xff0c;甚至要考虑到程序架构层面。 在开发板上&#xff0c;可能…...

数据结构 1-2 线性表的链式存储-链表

1 原理 顺序表的缺点&#xff1a; 插入和删除移动大量元素数组的大小不好控制占用一大段连续的存储空间&#xff0c;造成很多碎片 链表规避了上述顺序表缺点 逻辑上相邻的两个元素在物理位置上不相邻 头结点 L&#xff1a;头指针 头指针&#xff1a;链表中第一个结点的存储…...