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自由度抓取方法将场景中的所有点视为平等,并采用均匀采样来选择抓取候选点,但忽略了抓取位置的重要性,这极大地影响了抓取姿态检…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...