OOP - 实验一

news/2025/10/17 18:38:21/文章来源:https://www.cnblogs.com/twx123/p/19137421
任务1:代码:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>template<typename T>
void output(const T &c);
void test1();
void test2();
void test3();
int main() {std::cout << "测试1: \n";test1();std::cout << "\n测试2: \n";test2();std::cout << "\n测试3: \n";test3();
}template <typename T>
void output(const T &c) {for(auto &i : c)std::cout << i << ' ';std::cout << '\n';
}void test1() {using namespace std;string s0{"0123456789"};cout << "s0 = " << s0 << endl;string s1(s0);reverse(s1.begin(), s1.end()); cout << "s1 = " << s1 << endl;string s2(s0.size(), ' ');reverse_copy(s0.begin(), s0.end(), s2.begin()); cout << "s2 = " << s2 << endl;
}void test2() {using namespace std;vector<int> v0{2, 0, 4, 9};cout << "v0: "; output(v0);vector<int> v1{v0};reverse(v1.begin(), v1.end());cout << "v1: "; output(v1);vector<int> v2{v0};reverse_copy(v0.begin(), v0.end(), v2.begin());cout << "v2: "; output(v2);
}void test3() {using namespace std;vector<int> v0{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};cout << "v0: "; output(v0);vector<int> v1{v0};rotate(v1.begin(), v1.begin()+1, v1.end()); cout << "v1: "; output(v1);vector<int> v2{v0}; rotate(v2.begin(), v2.begin()+2, v2.end()); cout << "v2: "; output(v2);vector<int> v3{v0};rotate(v3.begin(), v3.end()-1, v3.end()); cout << "v3: "; output(v3);vector<int> v4{v0};rotate(v4.begin(), v4.end()-2, v4.end()); cout << "v4: "; output(v4);
}

运行结果:

image

 问题1:reverse的反转操作实在当前数组内进行,会直接改变当前数组的顺序,而reverse_copy是将反转后的数组拷贝到一个新的容器内,不会改变当前数组。

问题2:rotate(参数1,参数2,参数3)函数是一个循环位移函数,参数1和3分别代表要循环的部分的起点和终点,参数二代表循环位移后位于第一个位置的元素。

 

任务2:代码:

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <iomanip>
#include <cstdlib>
#include <ctime>template<typename T>
void output(const T &c);int generate_random_number();
void test1();
void test2();int main() {std::srand(std::time(0));  std::cout << "测试1: \n";test1();std::cout << "测试2: \n";test2();
}template<typename T>
void output(const T &c) {for (auto i : c)std::cout << i << ' ';std::cout << '\n';
}int generate_random_number() {return std::rand() % 101;
}void test1() {using namespace std;vector<int> v0(10);  generate(v0.begin(), v0.end(), generate_random_number); cout << "v0: "; output(v0);vector<int> v1(v0);sort(v1.begin(), v1.end()); cout << "v1: "; output(v1);vector<int> v2(v0);sort(v2.begin()+1, v2.end()-1); cout << "v2: "; output(v2);
}void test2() {using namespace std;vector<int> v0(10);generate(v0.begin(), v0.end(), generate_random_number);cout << "v0: "; output(v0);auto max_it = max_element(v0.begin(), v0.end());auto min_it = min_element(v0.begin(), v0.end());cout << "最小值: " << *min_it << endl;cout << "最大值: " << *max_it << endl;auto ans = minmax_element(v0.begin(), v0.end());cout << "最小值: " << *ans.first << endl;cout << "最大值: " << *ans.second << endl;double avg1 = accumulate(v0.begin(), v0.end(), 0.0) / v0.size();cout << "均值: " << fixed << setprecision(2) << avg1 << endl;sort(v0.begin(), v0.end());double avg2 = accumulate(v0.begin() + 1, v0.end() - 1, 0.0) / (v0.size() - 2);cout << "去掉最大值、最小值之后,均值: " << avg2 << endl;
}

image

 问题1:通过第三参数来给第一参数和第二参数中间的位置填充数据/元素

问题2:只需要遍历一次容器内的数据元素,节省了时间和空间成本

问题3:效果相同

 

任务3:代码:

#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>unsigned char func(unsigned char c);
void test1();
void test2();int main() {std::cout << "测试1:字符串大小写转换\n";test1();std::cout << "测试2:字符替换\n";test2();
}unsigned char func(unsigned char c) {if (c == '1')return 'a';if (c == '2')return 'A';if (std::isalpha(c))return static_cast<unsigned char>(c + 1);return c;
}void test1() {std::string s = "Hello World 2048!";std::cout << "s = " << s << "\n";std::string s1;for (char c : s)s1 += std::tolower(c);std::cout << "s1 = " << s1 << "\n";std::string s2;for (char c : s)s2 += std::toupper(c);std::cout << "s2 = " << s2 << "\n";
}void test2() {std::string s1 = "I love C++!";std::cout << "s1 = " << s1 << "\n";std::string s2(s1.size(), '*');std::transform(s1.begin(), s1.end(), s2.begin(), func);std::cout << "s2 = " << s2 << "\n";
}

image

 问题1:把字符 1 转换为a,把字符 2 转换为A把字母字符转换为其在字母表中后一个位置的字母。

问题2:将指定内容的大写字母全部转换为小写;将指定内容的小写字母全部转换为大写。

问题3:1:指定区域的起始位置,2:指定区域的结束位置,3:生成的数据开始存储的位置,4:数据转化/处理规则

 

任务4:代码:

#include <iostream>
#include <string>
#include <algorithm>bool is_palindrome(const std::string &s);
bool is_palindrome_ignore_case(const std::string &s);int main() {using namespace std;string s;// 多组输入,直到按下Ctrl+Z结束测试while(cin >> s) {cout << boolalpha<< "区分大小写: " << is_palindrome(s) << "\n"<< "不区分大小写: " << is_palindrome_ignore_case(s) << "\n\n";}
}bool is_palindrome(const std::string &s){int left=0 ,right=s.size()-1 ;while(left<right){if(s[left]!=s[right]){return false ;}left++ ;right-- ;}return true ;
}bool is_palindrome_ignore_case(const std::string &s){std::string s0 ;int left=0 ,right=s.size()-1 ;for(char c : s){s0 += tolower(c) ;}while(left<right){if(s0[left]!=s0[right]){return false ;}left++ ;right-- ;}return true ;
}

image

 思考:

 

任务5:代码:

#include <iostream>
#include <string>
#include <algorithm>std::string dec2n(int x, int n = 2);int main() {int x;while(std::cin >> x) {std::cout << "十进制: " << x << '\n'<< "二进制: " << dec2n(x) << '\n'<< "八进制: " << dec2n(x, 8) << '\n'<< "十二进制: " << dec2n(x, 12) << '\n'<< "十六进制: " << dec2n(x, 16) << '\n'<< "三十二进制: " << dec2n(x, 32) << "\n\n";}
}std::string dec2n(int x, int n){std::string result ;char str ;if(x == 0){return "0" ;}while(x>0){int remainder = x % n ;if( remainder < 10 ){str = '0' + remainder ;}else{str = 'A' + remainder - 10 ;}result.insert(0 , 1, str) ;x = x/n ;}return result ;
}

image

 

 

任务6:代码:

#include<iostream>
#include<string>
#include<cctype>
#include<iomanip>
#include<algorithm> 
using namespace std ;int main(){string str = " a b c d e f g h i j k l m n o p q r s t u v w x y z" ;cout << "  " << str << endl ;for (char &c : str) {if (c != ' ') {c = toupper(c);}}for(int i = 1 ; i <= 26 ; i++){rotate(str.begin(), str.begin() + 2, str.end()) ; cout << setw(2) << i << str << endl ;}return 0 ;
}

image

 

 

任务7:代码:

#include<iostream>
#include<cstdlib>
#include<ctime>
#include<iomanip>
using namespace std ;int main() {srand(static_cast<unsigned int>(time(0))) ;int correctCount = 0 ;for (int i = 0; i < 10; i++) {int num1 = rand() % 10 + 1 ;int num2 = rand() % 10 + 1 ;int op = rand() % 4 ;int userAnswer, correctAnswer ;char operation ;if (op == 1) {if (num1 < num2) {swap(num1, num2) ;}operation = '-' ;correctAnswer = num1 - num2 ;} else if (op == 3) {do {num1 = rand() % 10 + 1 ;} while (num1 % num2 != 0) ;operation = '/' ;correctAnswer = num1 / num2 ;} else if (op == 0) {operation = '+' ;correctAnswer = num1 + num2 ;} else {operation = '*' ;correctAnswer = num1 * num2 ;}cout << num1 << " " << operation << " " << num2 << " = " ;cin >> userAnswer ;if (userAnswer == correctAnswer) {correctCount++ ;}}double accuracy = static_cast<double>(correctCount) * 100 / 10 ;cout << "正确率: " << fixed << setprecision(1) << accuracy << "%" << endl ;return 0 ;
}

image

 

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

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

相关文章

题解:qoj8329 Excuse

题意:给出一个数 \(n\),现在我通过下面这个算法生成一个长为 \(n\) 的序列 \(a\)。先进行 \(n\) 次随机扔一个硬币,然后如果你最后连续 \(k\) 次投出的是正面朝上,那么就将一个 \(k\) 加入序列末尾。问序列 \(a\) …

`uv run pytest` does not work

错误信息 uv初始化的python项目下,执行 uv run pytest 提示错误信息:❌Failed to canonicalize script path解决方法: 1,编辑 pyproject.toml,并保存: [tool.pytest.ini_options] pythonpath = ["."]2,…

VMware17.6图文安装教程(附安装包)VMware17.6

一、VMware17.6下载 1.官方正版VMware下载链接下载链接https://pan.quark.cn/s/6827b0764042 二、VMware17.6软件介绍 VMware Workstation Pro 17.6是一款功能强大的桌面虚拟化软件,以下是其相关介绍: 功能特性 多操…

Sourcetree - Git 备份

在 Sourcetree 中使用 git bundle 打开 Sourcetree 的内置终端: 在 Sourcetree 中打开你的仓库。 寻找 “终端”(Terminal) 标签页或相关功能。这通常在 Sourcetree 的主界面底部或某个侧边栏中。如果找不到,可以尝…

uni-app x实现上下拉动,动态加载数据

一、概述 上一篇文章,已经实现了商品列表组件封装以及使用。 但是商品列表页面,还需要实现,上下拉动,动态加载数据。 效果如下:二、onReachBottom onReachBottom是微信小程序页面生命周期中的回调函数,用于检测页…

HyperWorks许可状态监控工具

在现今日益复杂的工程设计与仿真环境中,对软件许可状态的有效监控已成为确保工作流程顺畅、资源高效利用的关键。为了满足这一需求,HyperWorks推出了强大的许可状态监控工具,帮助用户实时了解许可使用情况,优化资源…

mysql删除数据表某个日期之前的数据

DELETE FROM 表名WHERE 时间字段名称 < 2025-09-28 00:00:00; (如果是时间戳就填时间戳数字)每天进步一点点

从创作到分析:2025 公众号排版工具全维度测评榜单

从创作到分析:2025 公众号排版工具全维度测评榜单2025公众号工具测评:壹伴AI编辑器全链路优势深度解析 作为新媒体运营者,你是否常陷入这些困境:熬夜赶稿后排版格式反复出错,跨平台分发时样式全乱;拟标题时反复修…

企业微信ipad协议稳定防封的最新最全功能

企业微信ipad协议稳定防封的最新最全功能免费试用&&技术支持: const wx="mff031829" 企业微信ipad的技术特点:多端共存:iPad 协议独立运行,不影响 PC 端和手机端的登录状态,实现三端同步在线。…

企业微信协议ipad,稳定防封私有化部署私域流量聚合聊天,机器人实现方案

企业微信协议ipad,稳定防封私有化部署私域流量聚合聊天,机器人实现方案企业微信iPad协议是一种基于企业微信iPad版本的智能接口服务,通过API接口,企业可以实现对客户群的精细化管理和高效营销。以下是关于企业微信…

重新思考钓鱼攻击意识培训:网络安全的关键反思

本文探讨了钓鱼攻击意识培训的有效性与潜在风险,分析了当前企业安全培训中存在的误区,并提出了构建更有效网络安全防护体系的具体建议。在MGM事件发生后,我认为这是讨论钓鱼攻击意识的好时机。 据传闻,攻击者能够冒…

任务分解与小模型如何降低AI成本

本文探讨如何通过任务分解和使用小型专用语言模型替代单一大型模型来降低AI应用成本,分析系统复杂度与性能间的平衡,并展示个性化网站生成的具体案例。任务分解与小型语言模型如何让AI更经济 生成式AI应用的广泛使用…

spring事件监听的核心机制

spring事件监听的核心机制Spring 事件监听机制的核心是基于观察者模式(Observer Pattern) 实现的组件间解耦通信机制,通过事件(Event)、监听器(Listener)、事件发布者(Publisher) 三者的协作,实现 “发布 - …

直播软件开发搭建公司

作为专ye的直播软件开发公司,山东(泰安)布谷鸟网络科技有限公司深耕直播软件开发和搭建业务,致力于为客户提供稳定、高效的直播解决方案,推出布谷直播源码,满足不同业务场景的定制需求。本文将从多个角度解析直播软…

freeswitch的proxy_media模式下video流的问题与修正

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 测试过程中发现fs的proxy_media模式的一个bug,就是video媒体流的转发处理有问题。 环境 CentOS 7.9 freeswitch 1.6.20 问题 fs配置为proxy_media模式,A路发起…

DNS 相关

dig 使用 背景 example.com 是一个公网注册的域名,在阿里云配置权威DNS解析,本地内网服务器也搭建了一个bind server同样配置了example.com的zone解析该域名,本地所有ECS的/etc/resolv.conf 配置的 nameserver为 10…

2025 年无锡专线物流公司最新推荐排行榜:聚焦个性化运输解决方案,精选优质服务商往返无锡/冷链无锡/公路无锡/大件无锡专线物流公司推荐

当前工业生产节奏持续加快,无锡地区企业对专线物流定制服务的需求愈发多样化、精细化,涵盖往返运输、冷链配送、大件机械运输等多个细分场景。然而,物流市场中企业资质、服务能力参差不齐,部分服务商存在定制方案不…

Dubbo入门-通过spring-boot来动手实践

第一种--快速创建应用 可以直接下载示例项目,链接:https://github.com/apache/dubbo-samples/tree/master/11-quickstart 第二种--新建项目 新建 Java 空白 Maven 项目jdk17之后我们还需要创建 dubbo-spring-boot-de…

使用ceph rdb做k8s后端存储(ceph-csi storageclass

环境:Os:Centos 7k8s:v1.28 ceph:14.2.22###############################################ceph端分配存储##############################1.分配osd pool和创建用户[root@master tmp]#ceph osd pool create dynamics-…

2025 最新火烧板源头厂家推荐排行榜:自有矿山加持 + 品质卓越,芝麻灰 / 五莲花等石材采购优选指南

当前火烧板市场面临多重采购困境:部分厂家缩减生产流程导致产品色泽不均、质地松软,难以适配建筑与装修行业的高品质需求;多数中小型商家缺乏自有矿山,原材料依赖外购,常因供应中断或品质波动延误工程进度;加工精…