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自由度抓取方法将场景中的所有点视为平等,并采用均匀采样来选择抓取候选点,但忽略了抓取位置的重要性,这极大地影响了抓取姿态检…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
