2.19c++练习

1.封装一个mystring类
拥有私有成员:
    char* p
    int len
    
需要让以下代码编译通过,并实现对应功能
mystring str = "hello"
mystring ptr;
ptr.copy(str)
ptr.append(str)
ptr.show() 输出ptr代表的字符串
ptr.compare(str) 比较ptr和str是否一样
ptr.swap(str) 交换ptr 和 str的内容 

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>using namespace std;class mystring {
private:char* p;  // 用来存储字符串的指针int len;  // 字符串的长度public:// 构造函数mystring(const char* str = "") {len = strlen(str);  // 获取字符串的长度p = new char[len + 1];  // 为字符串分配内存strcpy(p, str);  // 复制传入的字符串cout << "构造函数" << endl;}// 析构函数~mystring() {delete[] p;  // 释放动态分配的内存cout << "析构函数" << endl;}// 拷贝函数void copy(const char* str) {delete[] p;  // 先释放当前字符串的内存len = strlen(str);p = new char[len + 1];strcpy(p, str);  // 复制新的字符串}// 附加函数void m_append(const char* str) {char* temp = new char[len + strlen(str) + 1];  // 为新字符串分配内存strcpy(temp, p);  // 复制原字符串strcat(temp, str);  // 追加新字符串delete[] p;  // 释放旧的内存p = temp;  // 更新指针len += strlen(str);  // 更新长度}// 输出函数void show() const {cout << p << endl;}// 比较函数bool compare(const char* str) const {return strcmp(p, str) == 0;  // 比较字符串是否相等}// 交换内容void m_swap(mystring& other) {swap(p, other.p);  // 交换指针swap(len, other.len);  // 交换长度}
};int main() {mystring str("hello");mystring ptr;ptr.copy("world");  // 将 "world" 复制到 ptrptr.m_append("!!!");  // 追加 "!!!" 到 ptrptr.show();  // 输出 "world!!!"bool isEqual = ptr.compare("world!!!");  // 比较 ptr 和 "world!!!"cout << "Are they equal? " << (isEqual ? "Yes" : "No") << endl;ptr.m_swap(str);  // 交换 str 和 ptr 的内容cout << "After swap:" << endl;str.show();  // 输出 "world!!!"ptr.show();  // 输出 "hello"return 0;
}

 2.封装一个 File 类,用有私有成员
File* fp
实现以下功能
File f = "文件名" 要求打开该文件
f.write(string str) 要求将str数据写入文件中
string str = f.read(int size) 从文件中读取最多size个字节,并将读取到的数据返回
析构函数

 

#include <iostream>
#include <fstream>
#include <string>using namespace std;class File {
private:fstream* fp;  // 文件指针string filename;public:// 构造函数,接受文件名并打开文件File(const string& fname) {filename = fname;fp = new fstream(filename, ios::in | ios::out | ios::app);  // 读写模式,并追加内容if (!fp->is_open()) {  // 如果文件不存在,则创建新文件fp->open(filename, ios::out);  // 先创建文件fp->close();fp->open(filename, ios::in | ios::out | ios::app);  // 重新以读写模式打开}cout << "文件 " << filename << " 打开成功!" << endl;}// 写入数据void write(const string& str) {if (fp && fp->is_open()) {*fp << str;  // 写入字符串fp->flush();  // 立即写入文件}}// 读取数据string read(int size) {if (!fp || !fp->is_open()) {return "";}fp->seekg(0, ios::beg);  // 重新定位到文件开头char* buffer = new char[size + 1];  // 分配缓冲区fp->read(buffer, size);  // 读取 size 个字节int bytesRead = fp->gcount();  // 获取实际读取的字节数buffer[bytesRead] = '\0';  // 确保字符串终止string result(buffer);  // 转换为字符串delete[] buffer;  // 释放缓冲区return result;}// 析构函数,关闭文件~File() {if (fp) {fp->close();delete fp;cout << "文件 " << filename << " 已关闭!" << endl;}}
};// 测试代码
int main() {File f("test.txt");  // 打开文件 test.txtf.write("Hello, world!\n");  // 写入字符串string content = f.read(100);  // 读取 100 字节cout << "读取到的内容:" << content << endl;return 0;
}

3.封装一个 Mutex 互斥锁类
要求:
构造函数:初始化互斥锁,并选择互斥锁的种类
lock 上锁互斥锁
unlock 解锁互斥锁
析构函数,销毁互斥锁

并且开启一个线程测试该互斥锁

#include <iostream>
#include <thread>
#include <mutex>using namespace std;class Mutex {
private:mutex mtx;  // 标准互斥锁public:// 构造函数:初始化互斥锁Mutex() {cout << "Mutex 初始化成功!" << endl;}// 加锁void lock() {mtx.lock();cout << "Mutex 已加锁" << endl;}// 解锁void unlock() {mtx.unlock();cout << "Mutex 已解锁" << endl;}// 析构函数:自动销毁~Mutex() {cout << "Mutex 已销毁" << endl;}
};// 共享资源
int shared_counter = 0;
Mutex myMutex;// 线程函数
void increment(int id) {for (int i = 0; i < 5; i++) {myMutex.lock();cout << "线程 " << id << " 访问共享资源" << endl;shared_counter++;cout << "当前 shared_counter 值:" << shared_counter << endl;myMutex.unlock();this_thread::sleep_for(chrono::milliseconds(100));  // 模拟耗时操作}
}int main() {// 创建两个线程thread t1(increment, 1);thread t2(increment, 2);// 等待线程完成t1.join();t2.join();cout << "最终 shared_counter 值:" << shared_counter << endl;return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20726.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 的存储引擎简介

使用show engines可以查看安装的MySQL的引擎相关信息 MySQL 的引擎不止这么多&#xff0c;这只是安装的这个版本有的引擎。可以看到&#xff0c;只有 InnoDB 支持事务&#xff0c;其他的引擎都是不支持事务的。 说几个我了解的比较多的引擎&#xff1a; InnoDB InnoDB 是MyS…

DeepBI助力跨境电商打破流量垄断:AI驱动的亚马逊广告投放新打法

#亚马逊广告优化# 亲爱的亚马逊跨境电商卖家们&#xff0c;是否曾因亚马逊的广告打法不清晰&#xff0c;或是纠结于亚马逊广告费用过高&#xff0c;或是为亚马逊电商广告怎么投放合适的问题而苦恼&#xff1f;在竞争激烈的亚马逊市场中&#xff0c;广告投放效果平平&#xff0…

保护大数据的最佳实践方案

在当今数字化时代&#xff0c;保障大数据安全的重要性再怎么强调也不为过。 随着科技的迅猛发展以及对数据驱动决策的依赖日益加深&#xff0c;企业必须将保护其宝贵信息置于首位。 我们将深入探讨保障大数据安全的流程&#xff0c;并讨论关键原则、策略、工具及技术&#xf…

解决DeepSeek服务器繁忙的有效方法

全球42%的企业遭遇过AI工具服务器过载导致内容生产中断&#xff08;数据来源&#xff1a;Gartner 2025&#xff09;。当竞品在凌晨3点自动发布「智能家居安装指南」时&#xff0c;你的团队可能正因DeepSeek服务器繁忙错失「净水器保养教程」的流量黄金期⏳。147SEO智能调度系统…

DeepSeek核心算法解析:如何打造比肩ChatGPT的国产大模型

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列一DeepSeek核心算法解析&#xff1a;如何…

山石网科×阿里云通义灵码,开启研发“AI智造”新时代

近日&#xff0c;山石网科正式宣布全面接入阿里云通义灵码企业专属版&#xff0c;这标志着山石网科在研发智能化、自动化领域迈出重要一步&#xff0c;为研发工作注入强大的AI动力&#xff0c;实现多维度的效率飞跃。 此次合作&#xff0c;阿里云通义灵码依托强大的AI能力&…

Linux部署DeepSeek r1 模型训练

之前写过一篇windows下部署deepseekR1的文章&#xff0c;有小伙伴反馈提供一篇linux下部署DeepSeek r1 模型训练教程&#xff0c;在 Linux 环境下&#xff0c;我找了足够的相关资料&#xff0c;花费了一些时间&#xff0c;我成功部署了 DeepSeek R1 模型训练任务&#xff0c;结…

学习kafka和flink

kafka kafka安装一套流程 方法一&#xff1a;启动需安装zookeeper和kafka 【Kafka】Windows下安装Kafka&#xff08;图文记录详细步骤&#xff09; 安装Tzq2018写的上面链接安装的&#xff0c;一切很顺利&#xff0c;除了zookeeper的环境变量不管如何配置都不管用&#xff0…

安装海康威视相机SDK后,catkin_make其他项目时,出现“libusb_set_option”错误的解决方法

硬件&#xff1a;雷神MIX G139H047LD 工控机 系统&#xff1a;ubuntu20.04 之前运行某项目时&#xff0c;处于正常状态。后来由于要使用海康威视工业相机&#xff08;型号&#xff1a;MV-CA013-21UC&#xff09;&#xff0c;便下载了并安装了该相机的SDK&#xff0c;之后运行…

K8s 之端口暴露(The Port of K8s is Exposed)

K8s 之端口暴露 Kubernetes 是一个用于管理容器化应用程序的流行工具。然而&#xff0c;关于它的工作原理存在一些误解。最常见的误解之一是关于 Kubernetes Pod 中的端口暴露。本文将解释 Kubernetes 中端口暴露的真相。 1 误解 像许多 Kubernetes 新手一样&#xff0c;我最…

科普:Docker run的相关事项

一、镜像名&#xff08;含标签&#xff09;太长 如&#xff0c;通过如下命令行&#xff1a; docker pull designthru2019/dify:56c6d1af0944dbdb5e0115cb623ff0e118a4ac62拉取的镜像名&#xff08;及标签&#xff09;太长&#xff0c;可以通过改名的方法变短。 在 Docker 中&…

Windows服务器搭建时间同步服务

一、配置NTP服务器 1、在局域网内找一台时间可靠的计算机或服务器做为NTP服务器&#xff0c;例IP&#xff1a;209.209.209.2 2、在NTP服务器上运行 regedit 打开注册表 3、在注册表中展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpSer…

【Hugging Face系列篇】01初步介绍:“AI界的GitHub”

Hugging Face 是一个开源机器学习平台,专注于自然语言处理(NLP)和人工智能,提供模型、数据集、工具及协作社区支持,被誉为“AI界的GitHub”。 目录 一、历史发展 二、核心价值 三、核心功能与工具 四、适用人群与场景 五、优势与竞争力 六、使用方法(以情感分析为例…

企业内部知识库:安全协作打造企业智慧运营基石

内容概要 作为企业智慧运营的核心载体&#xff0c;企业内部知识库通过结构化的信息聚合与动态化的知识流动&#xff0c;为组织提供了从数据沉淀到价值转化的系统性框架。其底层架构以权限管理为核心&#xff0c;依托数据加密技术构建多层级访问控制机制&#xff0c;确保敏感信…

知识库的进化:从知识存储到知识共享

一、知识存储&#xff1a;知识库的起源与初步形态 回溯到知识库的早期阶段&#xff0c;受当时技术水平的显著限制&#xff0c;其功能相对较为单一&#xff0c;主要集中在知识存储方面。那时的知识库如同一个静态的知识仓库&#xff0c;管理员在后台辛勤地上传各类文档&#xff…

事务--实操演示

目录 一、准备工作 二、在MySQL中操作事务&#xff08;重点&#xff09; 第一种方式&#xff1a;使用命令的方式 第二种方式&#xff1a;设置MySQL事务不默认提交的方式 结 三、在JDBC中操作事务&#xff08;掌握&#xff09; 第一种方式&#xff1a;使用命令的方式 第…

【数据挖掘】--算法

【数据挖掘】--算法 目录&#xff1a;1. 缺失值和数值属性处理1缺失值处理&#xff1a; 2. 用于文档分类的朴素贝叶斯3. 分治法&#xff1a;建立决策树4. 覆盖算法建立规则5. 挖掘关联规则6. 线性模型有效寻找最近邻暴力搜索&#xff08;Brute-Force Search&#xff09;kd树&am…

什么是Grok-3?技术特点,场景,潜在问题与挑战

Grok-3 的技术特点与优势 1. 超大算力与训练规模 算力投入:Grok-3 使用了 20 万块英伟达 H100 GPU,分两个阶段训练(第一阶段 10 万 GPU 训练 144 天,第二阶段 20 万 GPU 训练 92 天),总计算量是前代 Grok-2 的 10 倍。这种规模远超同期其他项目(如印度的 1.8 万 GPU 公…

爬取网站内容转为markdown 和 html(通常模式)

我们遇到一些自己喜欢内容&#xff0c;想保存下来&#xff0c;手动复制粘贴很麻烦&#xff0c;我们使用 python 来爬取这些内容。 一、代码 downlod.py import os import requests from bs4 import BeautifulSoup from urllib.parse import urljoin# 目标网页&#xff08;可…

Java 大视界 -- 企业数字化转型中的 Java 大数据战略与实践(93)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…