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;// 辅助函数:复制字符串void copy(const char* source) {len strlen(source);p new char[len 1];strcpy(p, source);}// 辅助函数:释放内存void release() {if (…...
图书馆系统源码详解
本项目是一个基于Scala语言开发的图书馆管理系统。系统主要由以下几个部分组成:数据访问层(DAO)、数据模型层(Models)、服务层(Service)以及用户界面层(UI)。以下是对项目…...
Node.js中如何修改全局变量的几种方式
Node.js中如何修改全局变量。我需要先理解他们的需求。可能他们是在开发过程中遇到了需要跨模块共享数据的情况,或者想要配置一些全局可访问的设置。不过,使用全局变量可能存在一些问题,比如命名冲突、难以维护和测试困难,所以我得…...
基于javaweb的SpringBoot个人博客系统设计和实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
厦大团队:DeepSeek大模型概念、技术与应用实践 140页PDF完整版下载
DeepSeek使用教程系列: 厦门大学: DeepSeek大模型概念、技术与应用实践 140页PDF完整版文件 厦大团队:DeepSeek大模型概念、技术与应用实践(140页PPT读懂大模型).pdf https://pan.baidu.com/s/1de4UIxqPsvMBIYcpen_M-…...
【Blender】二、建模篇--05,阵列修改器与晶格形变
阵列修改器是bender里面一个比较常用的修改器,所以我们单独开口来讲,我们会先从几片树叶出发,然后我们用阵列修改器把这几片树叶变成这样的造型和这样的造型。这两个造型分别就代表着阵列修改器最常用的两种偏移方法,我们现在就开始我们先来做几个树叶。 1.树叶建模 首先…...
#渗透测试#批量漏洞挖掘#畅捷通T+远程命令执行漏洞
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 一、漏洞概况 二、攻击特征 三、应急处置…...
【Python爬虫(23)】探秘Python爬虫数据存储:MongoDB实战指南
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
Pytorch使用手册-音频数据增强(专题二十)
音频数据增强 torchaudio 提供了多种方式来增强音频数据。 在本教程中,我们将介绍一种应用效果、滤波器、RIR(房间脉冲响应)和编解码器的方法。 最后,我们将从干净的语音合成带噪声的电话语音。 import torch import torchaudio import torchaudio.functional as Fprin…...
Linux 命令大全完整版(04)
1. 用户信息相关命令 who 功能说明:显示目前登入系统的用户信息。语 法:who [-Himqsw][--help][--version][am i][记录文件]补充说明:执行这项指令可得知目前有哪些用户登入系统,单独执行 who 指令会列出登入帐号、使用的终端…...
嵌入式Linux内核底层调试技术Kprobes
大家好,我是bug菌~ Kprobes 是 Linux 内核中一种动态插桩(Dynamic Instrumentation)技术,允许在不修改内核源码或重启系统的前提下,动态监控内核函数的执行。它是内核调试、性能分析和安全监控的重要工具。以下从技术…...
leetcode 119. 杨辉三角 II
给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIndex 1 输出: [1,1]提示…...
内网网络安全的解决之道
本文简要分析了企业内部网络所面临的主要分析,阐述了安全管理人员针对不同威胁的主要技术应对措施。进一步介绍了业界各种技术措施的现状,并提出了未来可能的发展趋势。 内网网络安全问题的提出 网络安全对于绝大多数人而言指的都是互联网安全ÿ…...
分布式光纤声波振动技术在钻井泄漏检测中的应用
在石油天然气的钻井作业中,及时发现并定位泄漏点对于保障开采安全、降低环境污染以及避免经济损失至关重要。传统的泄漏检测方法往往存在局限性,而分布式光纤声波振动技术凭借其独特的优势,正逐渐成为钻井过程中寻找泄漏的有力工具。 技术原理…...
deepseek 导出导入模型(Windows)
前言 实现导出导入deepseek 模型。deepseek 安装Windows下参考 Windows 导出模型 Restart-Service 重启服务参考Stop-Service 关闭服务参考Start-Service 确定服务参考Compress-Archive 压缩参考Expand-Archive 解压参考setx 环境变量参考C:\Users\用户名\.ollama\models 默…...
Spring MVC配置文件
1. DispatcherServlet配置 作用:DispatcherServlet是Spring MVC的核心前端控制器,用于接收所有HTTP请求,并将请求分发给对应的处理器(Controller)。 配置方式: 在web.xml中配置DispatcherServletÿ…...
计算机视觉:主流数据集整理
第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络(附代码) 第五章࿱…...
基于AT89C52单片机的出租车计价器
点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/90419909?spm1001.2014.3001.5501 C17 部分参考设计如下: 摘要 随着城市交通行业的迅速发展,出租车作为最主要的城市公共交通工具之一…...
C++入门基础课程讲解
C编程入门课程 | 码学堂 竞赛名师授课,不仅涵盖了从零开始学习C的所有必要知识点,还深入探讨了基础算法及其应用,课程内容包括: (1)编程及上机平台介绍:包括推荐使用的IDE和在线编译器…...
Graspness Discovery in Clutters for Fast and Accurate Grasp Detection 解读
研究背景 研究问题 :这篇文章要解决的问题是如何在杂乱的环境中快速且准确地检测抓取姿态。传统的 6自由度抓取方法将场景中的所有点视为平等,并采用均匀采样来选择抓取候选点,但忽略了抓取位置的重要性,这极大地影响了抓取姿态检…...
告别路由器!用美格SLM750在CentOS 7.6直连4G网络(附完整驱动编译脚本)
美格SLM750 4G模块在CentOS 7.6下的直连网络部署实战 在物联网和边缘计算场景中,传统路由器方案往往成为网络延迟和单点故障的瓶颈。本文将详细介绍如何通过美格SLM750 4G模块实现CentOS 7.6系统的直接蜂窝网络接入,这种端到端的连接方式特别适合需要低延…...
齿轮箱零部件及其装配质检中的TVA技术突破(21)
前沿技术背景介绍:AI 智能体视觉检测系统(Transformer-based Vision Agent,缩写:TVA),是依托 Transformer 架构与“因式智能体”范式所构建的高精度智能体。它区别于传统机器视觉与早期 AI 视觉,…...
Cadence PowerDC新手避坑指南:从导入文件到生成Powertree的完整流程
Cadence PowerDC新手避坑指南:从导入文件到生成Powertree的完整流程 第一次打开PowerDC时,面对密密麻麻的菜单和参数,很多新手工程师都会感到无从下手。电源完整性仿真作为PCB设计的关键环节,直接影响着系统稳定性和功耗效率。本…...
Golang怎么实现跳表数据结构_Golang如何用Skip List实现有序数据的快速查找【方法】
Go标准库未提供跳表,因map和sort.Slicesort.Search已覆盖多数有序场景;但需动态插入、保持有序且平均O(log n)查找时(如内存索引、延迟调度),须自研或引入第三方。为什么 Go 标准库没有 skip listGo 官方没提供跳表&am…...
游戏版本,数据被盗如何预防
服务器被人入侵与被流量攻击,是GM经常会遇到的两个问题。流量攻击会导致服务器黑洞封停,用户无法访问,业务中断。机器被入侵,版本数据被盗,他人开了相同的游戏,也会给自己带来竞争压力。服务器平时要如何预…...
qmc-decoder完整指南:3分钟快速解密QQ音乐加密音频文件
qmc-decoder完整指南:3分钟快速解密QQ音乐加密音频文件 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder qmc-decoder是一款专业高效的QQ音乐加密音频文件解密工具…...
【论文学习】利用卫星观测数据的 X-STILT 模型详解
目录 J2018-提出 X-STILT (v1)模型( C O 2 CO_2 CO2总量反演) 2. 核心研究方法:X-STILT 模型 3. 使用的数据资源 4. 案例研究:沙特阿拉伯利雅得 J2022-改进 X-STILT 模型( C O 2 CO_2 CO2部门归因) 1. 研究核心:利用 C O 2 CO_2 CO2 与 C O CO CO 的排放比例 2.…...
心知天气API + ArduinoJson库实战:手把手教你为ESP8266天气时钟解析复杂JSON数据
心知天气API与ArduinoJson库深度解析:ESP8266天气时钟的JSON处理实战 在物联网开发中,数据获取与处理是核心技能之一。当我们使用ESP8266这类资源有限的微控制器时,如何高效解析复杂的JSON数据成为项目成功的关键。本文将聚焦心知天气API返回…...
从‘换脸’到‘换物’:手把手用Attention-GAN实现图片局部精准转换(避坑指南)
从‘换脸’到‘换物’:手把手用Attention-GAN实现图片局部精准转换(避坑指南) 在数字图像处理领域,生成对抗网络(GAN)技术已经从早期的整体风格迁移发展到如今的局部精准编辑。想象这样一个场景:…...
别再死磕卡尔曼滤波了!用Python从零实现一个RBPF粒子滤波建图(附避坑指南)
从零实现RBPF粒子滤波建图:Python实战与避坑指南 在机器人定位与建图(SLAM)领域,粒子滤波方法因其对非线性系统的天然适应能力而备受青睐。但大多数教程停留在理论推导,真正动手实现时总会遇到各种"魔鬼细节"。本文将用Python带你完…...
