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

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 (…...

图书馆系统源码详解

本项目是一个基于Scala语言开发的图书馆管理系统。系统主要由以下几个部分组成&#xff1a;数据访问层&#xff08;DAO&#xff09;、数据模型层&#xff08;Models&#xff09;、服务层&#xff08;Service&#xff09;以及用户界面层&#xff08;UI&#xff09;。以下是对项目…...

Node.js中如何修改全局变量的几种方式

Node.js中如何修改全局变量。我需要先理解他们的需求。可能他们是在开发过程中遇到了需要跨模块共享数据的情况&#xff0c;或者想要配置一些全局可访问的设置。不过&#xff0c;使用全局变量可能存在一些问题&#xff0c;比如命名冲突、难以维护和测试困难&#xff0c;所以我得…...

基于javaweb的SpringBoot个人博客系统设计和实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

厦大团队:DeepSeek大模型概念、技术与应用实践 140页PDF完整版下载

DeepSeek使用教程系列&#xff1a; 厦门大学&#xff1a; DeepSeek大模型概念、技术与应用实践 140页PDF完整版文件 厦大团队&#xff1a;DeepSeek大模型概念、技术与应用实践&#xff08;140页PPT读懂大模型&#xff09;.pdf https://pan.baidu.com/s/1de4UIxqPsvMBIYcpen_M-…...

【Blender】二、建模篇--05,阵列修改器与晶格形变

阵列修改器是bender里面一个比较常用的修改器,所以我们单独开口来讲,我们会先从几片树叶出发,然后我们用阵列修改器把这几片树叶变成这样的造型和这样的造型。这两个造型分别就代表着阵列修改器最常用的两种偏移方法,我们现在就开始我们先来做几个树叶。 1.树叶建模 首先…...

#渗透测试#批量漏洞挖掘#畅捷通T+远程命令执行漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 一、漏洞概况 二、攻击特征 三、应急处置…...

【Python爬虫(23)】探秘Python爬虫数据存储:MongoDB实战指南

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…...

Pytorch使用手册-音频数据增强(专题二十)

音频数据增强 torchaudio 提供了多种方式来增强音频数据。 在本教程中,我们将介绍一种应用效果、滤波器、RIR(房间脉冲响应)和编解码器的方法。 最后,我们将从干净的语音合成带噪声的电话语音。 import torch import torchaudio import torchaudio.functional as Fprin…...

Linux 命令大全完整版(04)

1. 用户信息相关命令 who 功能说明&#xff1a;显示目前登入系统的用户信息。语  法&#xff1a;who [-Himqsw][--help][--version][am i][记录文件]补充说明&#xff1a;执行这项指令可得知目前有哪些用户登入系统&#xff0c;单独执行 who 指令会列出登入帐号、使用的终端…...

嵌入式Linux内核底层调试技术Kprobes

大家好&#xff0c;我是bug菌~ Kprobes 是 Linux 内核中一种动态插桩&#xff08;Dynamic Instrumentation&#xff09;技术&#xff0c;允许在不修改内核源码或重启系统的前提下&#xff0c;动态监控内核函数的执行。它是内核调试、性能分析和安全监控的重要工具。以下从技术…...

leetcode 119. 杨辉三角 II

给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIndex 1 输出: [1,1]提示…...

内网网络安全的解决之道

本文简要分析了企业内部网络所面临的主要分析&#xff0c;阐述了安全管理人员针对不同威胁的主要技术应对措施。进一步介绍了业界各种技术措施的现状&#xff0c;并提出了未来可能的发展趋势。 内网网络安全问题的提出 网络安全对于绝大多数人而言指的都是互联网安全&#xff…...

分布式光纤声波振动技术在钻井泄漏检测中的应用

在石油天然气的钻井作业中&#xff0c;及时发现并定位泄漏点对于保障开采安全、降低环境污染以及避免经济损失至关重要。传统的泄漏检测方法往往存在局限性&#xff0c;而分布式光纤声波振动技术凭借其独特的优势&#xff0c;正逐渐成为钻井过程中寻找泄漏的有力工具。 技术原理…...

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配置 作用&#xff1a;DispatcherServlet是Spring MVC的核心前端控制器&#xff0c;用于接收所有HTTP请求&#xff0c;并将请求分发给对应的处理器&#xff08;Controller&#xff09;。 配置方式&#xff1a; 在web.xml中配置DispatcherServlet&#xff…...

计算机视觉:主流数据集整理

第一章&#xff1a;计算机视觉中图像的基础认知 第二章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(一) 第三章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(二) 第四章&#xff1a;搭建一个经典的LeNet5神经网络(附代码) 第五章&#xff1…...

基于AT89C52单片机的出租车计价器

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/90419909?spm1001.2014.3001.5501 C17 部分参考设计如下&#xff1a; 摘要 随着城市交通行业的迅速发展&#xff0c;出租车作为最主要的城市公共交通工具之一…...

C++入门基础课程讲解

C编程入门课程 | 码学堂 竞赛名师授课&#xff0c;不仅涵盖了从零开始学习C的所有必要知识点&#xff0c;还深入探讨了基础算法及其应用&#xff0c;课程内容包括&#xff1a; &#xff08;1&#xff09;编程及上机平台介绍&#xff1a;包括推荐使用的IDE和在线编译器&#xf…...

Graspness Discovery in Clutters for Fast and Accurate Grasp Detection 解读

研究背景 研究问题 &#xff1a;这篇文章要解决的问题是如何在杂乱的环境中快速且准确地检测抓取姿态。传统的 6自由度抓取方法将场景中的所有点视为平等&#xff0c;并采用均匀采样来选择抓取候选点&#xff0c;但忽略了抓取位置的重要性&#xff0c;这极大地影响了抓取姿态检…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...