【笔记】C语言转C++

网课链接:【C语言 转 C++ 简单教程】 https://www.bilibili.com/video/BV1UE411j7Ti/?p=27&share_source=copy_web&vd_source=4abe1433c2a7ef632aeed6a3d5c0b22a

网课老师B站id:别喷我id 

视频总时长:01:55:27

以下笔记是我通过此网课整理 建议先看完网课 再用这个笔记进行复习

网课老师同时整理了思维导图 可以在视频简介获取

/*用C++刷算法的不同之处:1、兼容C语言2、丰富的STL库3、string很好用4、时间上要差一些
*/#include<iostream>  // 输入输出流 input output
#include<cstring>  //即#include<string.h>
// C++中,C语言中的头文件都可以通过去掉.h,在开头加c实现
#include<string> 
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<bitset>
#include<algorithm> // sort()函数的头文件 algorithm算法
#include<cctype>
using namespace std;
// 使用名称空间 避免不同厂商使用的函数名称重复导致的误用
// 所以每家厂商将自己的函数封装在自己设定的名称空间里//结构体&引用&和传值//结构体
struct stu {string name;int age;
};
// stu a[10];  直接用stu命名变量// 引用: 引用的时候会把初始变量也改变 约等于c语言里的指针不写*
// 传值: 传值只改变函数里的变量 不会带到函数外 bool cmp1(int x, int y) {return x > y;
}
// 返回值为真 那么x放在y前面
// 返回值为假 交换两个数bool cmp2(stu a, stu b) {if (a.age != b.age)return a.age < b.age;elsereturn a.name < b.name;
}
// 以年龄为第一限制条件从小到大排序 
// 年龄相同就参考第二限制条件 按名字的ACSII码从小到大排序int main()
{//输入输出等基本int n;cin >> n;// 输入cin(记in)cout << "wohaoshuai!" << ++n << endl; // 输出cout(记out) 换行endl("\n")// cin cout的运算速度会低于scanf和printf/*若没有提前使用名称空间也可以在main函数中调用的时候使用以下格式:std::cinstd::coutstd::endl*/cout << "*******************" << endl;// bool和constfor (int i = 0; i < 10; i++)cout << n << " ";// 可在循环里定义变量icout << endl;bool flag = true;bool flag2 = -1;bool flag3 = 0;// bool将值判为0或1(非0即为1)cout << flag << " " << flag2 << " " << flag3 << endl;const int MAX = 150;// const定义的常量无法进行更改 可看做宏定义// MAX = 100; 此表达式会报错cout << MAX << endl;cout << "*******************" << endl;// 字符串// 定义字符串string s1 = "hello";string s2 = " world!";string s3 = s1 + s2;cout << s3 << endl;getline(cin, s1);// cin只能输入空格前的字符 getline可以输入一整行 但要声明头文件stringcout << s1 << endl << s1.length() << endl; // 此长度不包括\0// 子串string s1_sub = s1.substr(1, 2);// s.substr(n1,n2)(从下标为n1的字符开始,取n2个字符)// s.substr(n1)(从下标为n1的字符开始取,取完)// 【字符串下标从0开始算】cout << s1_sub << endl;cout << "*******************" << endl;// STL篇// vector 矢量向量/动态数组/不定(可变)参数组vector<int>v; // 定义一个长度为0的空数组v.resize(10);  // v.resize(length); 重新分配数组大小for (int i = 0; i < 10; i++)v[i] = i;for (int i = 0; i < 10; i++)cout << v[i] << " ";v.push_back(11); // 给数组扩充一个新空间 给首个空位赋值为11for (int i = 0; i < 11; i++)cout << v[i] << " ";cout << endl << v.size() << endl;vector<int>d(10, 2); // 定义一个长度为10,每个值都为2的数组d.size(); //变量名.方法for (auto p = d.begin(); p != d.end(); p++)  // b.end()的位置是最后一个元素的后一位cout << *p << " ";// 迭代器 自动遍历一遍数组中所有的数据cout << "*******************" << endl;// set 集合 里面的元素各不相同 而且元素会按照从小到大排序// unordered_set 省去排序过程(无序)的集合 要用#include<unordered_set>// unordered_set<int>s;  这样定义 其它调用方法和set一模一样set<int>s;s.insert(1);s.insert(2);s.insert(3);for (auto p = s.begin(); p != s.end(); p++)cout << *p << ' ';cout << endl;cout << (s.find(2) != s.end()) << endl;// 集合中找2 找到后返回2的位置 和s.end()的位置不同即返回1 说明找到了cout << (s.find(4) != s.end()) << endl;// 集合中找4 找到后返回4的位置 和s.end()的位置相同即返回0 说明未找到s.erase(1);  // 删除1cout << (s.find(1) != s.end()) << endl;cout << "*******************" << endl;// map 键值对 自动将所有的键值对按照键(ASCII)从小到大排序// unordered_map 省去排序过程(无序)的键值对 要用#include<unordered_map>// unordered_map<int>m;  这样定义 其它调用方法和map一模一样map<string, int>m;m["hello"] = 2;m["world"] = 3;m["ilovewuhan"] = 5;m["ha"] = 6;/*struct{string key;int data;}*/cout << "hello:" << m["hello"] << endl;for (auto p = m.begin(); p != m.end(); p++)cout << p->first << ":" << p->second << endl;// p->first为键 p->second为值cout << "map的长度为:" << m.size() << endl; // size容器cout << "*******************" << endl;// 栈和队列// stack 栈stack<int>sta;sta.push(1);sta.push(2);sta.push(3);sta.pop();sta.push(76);cout << sta.top() << endl;cout << "栈的长度为:" << sta.size() << endl;// 无法使用迭代器 栈只能获得栈顶元素// queue 队列queue<int>q;for (int i = 1; i <= 10; i++)q.push(i);q.pop();cout << "队首为:" << q.front() << endl << "队尾为:" << q.back() << endl;cout << q.size() << endl;cout << "*******************" << endl;// bitset 字符数组 从二进制的低位到高位依次为b[0]、b[1]……bitset<5>b(19);  // 5个二进制位 将19转化为二进制 即10011// bitset<5>b; 即初始化为00000// bitset<5>b("11"); 直接赋二进制的值 即为00011cout << b << endl; //直接输出这个字符for (int i = 0; i < b.size(); i++)cout << b[i] << " ";// 从低位到高位一个一个输出cout << endl;cout << "是否有1:" << b.any() << endl;cout << "是否不存在1:" << b.none() << endl;cout << "1的个数:" << b.count() << endl;cout << "b中元素个数:" << b.size() << endl;cout << "下标为i的元素是不是1:" << b.test(0) << endl;b.flip(1); // 第1位取反(是从右边开始数的第0位、第1位)// b.flip() 所有位取反b.reset(2); // 第2位归零// b.reset() 所有位归零cout << b << endl;unsigned long z = b.to_ulong(); // 转化为十进制cout << z << endl;string e = "0110101";bitset<5>c(e, 0, 5); // bitset<二进制位数>c(字符串,位置,取的位数)// 即bitset<5>c("01101");cout << "*******************" << endl;// sort函数 对一个数组进行排序(默认从小到大)// vector是容器 需要用v.begin()表示头 v.end()表示尾// int arr[]使用arr表示数组的首地址 arr+n表示尾部vector<int>g(10);for (int i = 9; i >= 0; i--)g[i] = 9 - i;for (int i = 0; i < 10; i++)cout << g[i] << " ";cout << endl;g.push_back(-1);sort(g.begin(), g.end()); // [ ) 左闭右开for (int i = 0; i < 11; i++)cout << g[i] << " ";cout << endl;sort(g.begin(), g.end(), cmp1); // cmp 自定义排序规则(需另外定义函数)for (int i = 0; i < 11; i++)cout << g[i] << " ";cout << endl;stu a[10];for (int i = 0; i < 10; i++)cin >> a[i].name >> a[i].age;sort(a, a + 10, cmp2);for (int i = 0; i < 10; i++)cout << a[i].name << " " << a[i].age << endl;cout << "*******************" << endl;// cctype头文件的函数char f = 'A';cout << "isalpha" << isalpha(f) << endl; // 字母?cout << "islower" << islower(f) << endl; // 小写字母?cout << "isupper" << isupper(f) << endl; // 大写字母?cout << "isalnum" << isalnum(f) << endl; // 字母or数字?cout << "isspace" << isspace(f) << endl; // space \t \r \n?char f1 = tolower(f); // 转化为小写字母cout << f1 << endl;char f2 = toupper(f); // 转化为大写字母cout << f2 << endl;cout << "*******************" << endl;// C++11篇// C++11的解释:2011年官方带来的新的语法标准 新增了很多特性   // dev c++使用C++11里的函数需要设置 // Settings->Compiler->C++11那一行勾选上->OK// auto声明  可以让编译器根据初始值直接推断变量的类型auto x = 19;auto y = 1.8;// 用auto定义的时候一定要初始化赋值// 迭代器用到auto(可用迭代器的有vector set map)// 基于范围的for循环int k[5] = { 1 };for (int i : k) // i作为参数不会带出for循环 类似于函数 除非给i改成&i取地址i++;for (int i : k)cout << i << " ";cout << endl;vector<int>k2(10, 1);for (auto i : k2) // 相当于迭代器 所有的容器都可以通过这种方式循环cout << i << " ";cout << endl;// to_string 将数字转化为字符变量string o = to_string(123.1); // 这边浮点型会自动保留到小数点后六位cout << o << endl;printf("%s\n", o.c_str()); // printf输出的形式// stoi和stod 将字符串转化为其它变量// 记忆方法:stoi (string to int)   stod (string to double) // 还有stof stold stol stoll stoul stoull等一系列int r = stoi("123");cout << r << endl;double t = stod("12.34");cout << t << endl;return 0;
}

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

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

相关文章

WireShark 下载、安装和使用

1、下载 官网下载太慢&#xff0c;本人另外提供下载地址【下载WireShark】 2、安装 全部默认下一步即可&#xff0c;但如下图所示的这一步值得拿出来说一下。这一步是要你安装Npcap&#xff0c;但是你的电脑如果已经安装了WinPcap&#xff0c;那么可以选择不再安装Npcap。Npca…

STM32模拟I2C通讯的驱动程序

目录 STM32模拟I2C通讯的驱动程序 开发环境 引脚连接 驱动程序 STM32模拟I2C通讯的驱动程序 开发环境 立创天空星开发板、主控芯片为STM32F407VxT6 引脚连接 使用stm32的PB9引脚模拟I2C时钟线SCL、PB8引脚模拟I2C数据线SDA 驱动程序 i2c.h文件如下&#xff1a;#ifndef…

Qt自定义类型在信号槽中的使用

引言 示例自定义数据类型信号槽效果检查代码注册自定义类型信号槽使用QVariant传递参数总结附加绑定信号槽,传递的参数如果是自定义类型的变量,槽函数不会响应。为什么呢?是因为自定义类型没有被写入元对象系统,对于Qt来说,不认识这个数据类型,Qt是以事件来驱动的,信号槽…

电子应用设计方案-50:智能牙刷系统方案设计

智能牙刷系统方案设计 一、引言 随着人们对口腔健康的重视程度不断提高&#xff0c;智能牙刷作为一种创新的口腔护理工具&#xff0c;能够更有效地帮助用户改善刷牙习惯和清洁效果。本方案旨在设计一款功能丰富、智能化程度高的智能牙刷系统。 二、系统概述 1. 系统目标 - 准…

2024年最新 Docker 安装 Nginx 容器 (完整详细版) 2025年最新

Docker 安装 Nginx 容器 (完整详细版) 本文详细介绍了Docker的安装步骤&#xff0c;包括如何从官方镜像仓库下载Nginx镜像&#xff0c;如何检查已下载的镜像。接着&#xff0c;讲解了创建Nginx配置文件的必要性&#xff0c;并提供了创建挂载目录的命令。然后&#xff0c;展示了…

【代码随想录day58】【C++复健】 117. 软件构建(拓扑排序);47. 参加科学大会(dijkstra(朴素版)精讲)

117. 软件构建&#xff08;拓扑排序&#xff09; 继续边看解析边做题&#xff0c;思考时的问题做个如下的总结&#xff1a; 1. 存边用什么数据结构&#xff1f; 在题目中&#xff0c;我们需要存储节点之间的依赖关系&#xff08;边信息&#xff09;。选择适合的数据结构非常重…

第九篇:k8s 通过helm发布应用

什么是helm&#xff1f; Helm 是 Kubernetes 的包管理器。Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式。 在红帽系的Linux中我们使用yum来管理RPM包&#xff0c;类似的&#xff0c;在K8s中我们可以使用helm来管理资源对象&#xff08;Deployment、Service、Ingress…

OpenCV相机标定与3D重建(9)相机标定函数calibrateCameraRO()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::calibrateCameraRO 是 OpenCV 中用于相机标定的函数&#xff0c;它允许固定某些点来进行更精确的标定。 函数原型 double cv::calibrateCa…

【CSS in Depth 2 精译_072】第 12 章 CSS 排版与间距概述 + 12.1 间距设置(上):究竟该用 em 还是 px

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 ✔️ 12.1.1 使用 em 还是 px ✔️12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 文章目录 第 12 章 排版与间距…

2024/12/12学习日志

为了更好地记录并反思自己的学习状况&#xff0c;将每日学习的内容、时长、心得等记录于此日志。 于9月3日开始记录&#xff0c;计划每日记录&#xff0c;希望至少能够坚持一个学期。 学习内容&#xff1a; 计组&#xff1a; 计算机架构 硬件的衡量指标&#xff1a;计算 编…

el-thee懒加载删除某条数据 ,el-thee懒加载重置,el-thee刷新某个节点

一、懒加载的tree已经全部展开&#xff0c;外部点击删除的时候不需要重新展开点击获取下一层数据 <template> <el-treeref"tree":data"treeData":props"defaultProps"render-after-expandhighlight-currentlazy:expand-on-click-node&q…

【问题记录】07 MAC电脑,使用FileZilla(SFTP)连接堡垒机不成功

项目场景&#xff1a; 使用MAC电脑&#xff0c;以子账号&#xff08;非root&#xff09;的形式登录&#xff0c;连接堡垒机CLB&#xff08;传统型负载均衡&#xff09;&#xff0c;使用FileZilla&#xff08;SFTP&#xff09;进行FTP文件传输。 问题描述&#xff1a; MAC电脑…

狗为啥会咬自己的尾巴

狗啃咬自己的尾巴&#xff0c;这一现象并非简单的好奇或贪玩之举&#xff0c;其背后可能隐藏着诸多复杂的原因&#xff0c;值得我们深入探究与深思。 从生理层面来看&#xff0c;尾巴部位出现皮肤疾病、寄生虫感染或受伤疼痛是常见诱因。例如&#xff0c;湿疹、跳蚤、蜱虫等问…

【数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;编写一个程序实现顺序栈的基本运算。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 初始化栈、销毁栈、判断栈是否为空、进栈、出栈、取…

Codeforces Round 992 (Div. 2)

传送门&#xff1a;Dashboard - Codeforces Round 992 (Div. 2) - Codeforces A. Game of Division 思路&#xff1a;模拟 AC代码&#xff1a;Submission #295676347 - Codeforces B. Paint a Strip 思路&#xff1a;数学 贪心 放置的位置一定是 1 4 10 22 48 ....…

前端(五)css属性

css属性 文章目录 css属性一、字体属性二、文本属性三、背景属性四、盒子模型 一、字体属性 font-weight&#xff1a;文字粗细&#xff0c;在100到900之间&#xff0c;normal(400),bord(700),inherit(继承父类) font-style&#xff1a;文字风格&#xff0c;normal表示正常(默认…

Linux网络之“桥接模式”和“NAT模式”配置

介绍虚拟机的“桥接模式”和“NAT模式”配置。 1、“桥接模式”介绍 “桥接模式”将虚拟机的虚拟网络适配器与主机的“物理网络适配器”进行交接&#xff0c;虚拟机中的“虚拟网络适配器”通过主机中的“物理网络适配器”访问外部网络。物理主机的网卡好比是一个“虚拟的交换机…

shell编程(完结)

shell编程&#xff08;完结&#xff09; 声明&#xff01; 学习视频来自B站up主 ​泷羽sec​​ 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章 笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其…

爬虫自动化之drissionpage+SwitchyOmega实现随时切换代理ip

本文介绍了如何使用DrizzlePage进行爬虫自动化,并重点讲解了首次启动时设置代理IP以及通过SwitchyOmega插件实现随时切换代理IP的方法。 安装一次,后面调用就不会再去安装了 下载地址:https://github.com/FelisCatus/SwitchyOmega/releases 这两个文件随便那个都可以,下载…

Ariba Procurement: Administration_Integration Basics

Ariba Procurement: Administration_Integration Basics SAP Ariba 和SAP ERP 的主数据集成 对于主数据,CIG 仅仅做数据传输,在CIG系统里无任何转换逻辑。在CIG中,不需要给主数据创建项目。SAP中以所需的文件格式或模式提取主数据(MD)。文件格式为CSV。然后,所有文件都…