C++ primer plus 第五节 循环
系列文章目录
C++ primer plus 第一节 步入C++-CSDN博客
C++ primer plus 第二节 hello world刨析-CSDN博客
C++ primer plus 第三节 数据处理-CSDN博客
C++ primer plus 第四节 复合类型-CSDN博客
文章目录
系列文章目录
文章目录
前言
一 for循环
总结
前言
由于作者看了后面的内容,觉得只要有点深入学过C语言就可以知道,所以这里就直接讲述一点,下一节直接讲述面向对象
一 for循环
1 for循环关键词
for循环后面跟了一个括号像一个函数的调用,但是for在C++里面已经定义为一个关键词了,所以编译器不会把他当作一个函数来看待,这还可以防止将函数名字命名为for
2 C++新增的语法规则
int x; int y; int z; x = y = z = 0;这种方法可以快速的将若干个变量设置为相同的值
3 表达式和语句
在我们之前学习C语言的时候基本都是见到的为明显的表达式👉1 明显表达式
22+27这个一般都知道为49👉2 不明显表达式
一般都是由两个值和一个运算符号组成
x = 20
这个就是表示20
maids = (cooks = 4) + 3;
这个maids为7
虽然这个不常见,但是我们也需要直到,接下来我们用vm来验证一下
我们可以看到这个(x=100)是可以给x赋值的,然后就是我们使用了ios_base::boolaplose来把这个0与1转换为bool类型买这个是可以设置的
👉3 有副作用的表达式
- 例子:++x + 15
- 解释:++x`表示将x的值加1,然后返回新的值。因此,++x + 15不仅计算了一个结果(x + 15),还改变了x的值(x被加1)这种改变就是副作用
4 副作用和顺序点
1 副作用和顺序点的定义:
副作用指的是在计算表达式时对某些东西(如存储在变量中的值)进行了修改
顺序点是程序执行过程中的一个点,在这里,进入下一步之前将确保对所有的副作用都进行了评估,在C++中,语句中的分号就是一个顺序点,这个副作用一般我们见到的就是++或者--
顺序点是有助于阐明后缀递增是何时进行,例如,看下面的代码while(guest++<10)cout<< guest <<endl;这个是可以从x打印到10的循环
但是这种顺序点弄的表达式会有些许问题,就比如
y = (4 + x++) + (6 + x++)
这个表达式就是根据顺序点进行书写的
由于副作用的执行顺序不确定,这段代码可能产生未定义行为(Undefined Behavior)
例如:假设初始时 X = 1
- 如果编译器先计算 (4 + X++),此时X为1,结果为5,然后X变为2
- 接着计算 (6 + X++),此时X为2,结果为8,然后X变为3
- 最终结果为 5 + 8 = 13
但编译器也可以这样执行
- 先计算 (4 + X++) 和 (6 + X++),此时X为1,两个子表达式的结果分别为5和7
- 然后统一将X增加2(因为有两个X++),最终X为3
- 最终结果为 5 + 7 = 12
✅理解
由于C++标准没有规定副作用的具体执行顺序,因此这种代码的输出是不确定的,属于未定义行为所以C++文档中就不再用顺序点这个东西了,由于++和--这个两个有确定性,不可具体的描述
5 前缀格式和后缀格式#include<iostream> using namespace std;int main() {for (int i = 1;i <= 10;++i) {cout << i << " " ;}cout << endl;for (int i = 1;i <= 10;i++) {cout << i << " ";}cout << " ";return 0; }我们来看这个for循环步长表达式
这两个打印的都是一样的,但是,其实这两个还是有很大的差别的👉(1)语义区别
- ++i(前缀递增):先将i的值增加1,然后返回增加后的值
- i++(后缀递增):先返回i的当前值,然后将i的值增加1
在`for`循环的迭代部分(如++i或i++),这种区别通常不会影响循环的逻辑,因为它们都被用来更新循环变量i,而循环条件是基于i的值来判断的👉(2)效率区别
- ++i:直接返回增加后的值,没有额外的临时变量
- i++:需要返回i的当前值,然后增加i的值。这意味着编译器可能需要创建一个临时变量来存储i的当前值,从而导致一些额外的开销
在简单类型(如`int`)的情况下,这种开销通常可以被编译器优化掉,因此在实际运行中可能看不出效率差异。但在复杂类型(如自定义类或迭代器)的情况下,i++可能会比++i更慢,因为i++需要创建一个临时对象来存储当前值6 逗号运算符号
👉用途一:用于for循环的步长表达式
for(int i = 1; i<n ; i++,j--)
这个就是逗号运算符号的用途,可以用于这个步长表达式
这个实际用的比较多的地方是把数组里面的值进行互换顺序,这个就比较常用👉用途二:确保表达式的安全性
C++给这个运算符号添加了一个特性就是,它确保先计算第一个表达式,然后计算第二个表达式(换句 话说,逗号运算符是一个顺序点)
如i = 20,j = 2 * i先处理 i,再处理 j👉用途三:逗号表达式的值是第二部分的值
cat = 17,240;
是被解释为`(cat = 17),240`
这个就是把cat存储17,后面的240不起任何作用
(cat = 17,240)
这个由于括号的优先级别最高,所以cat是240
根据用途二可以这么解释
✅第一个表达式
步骤1:先计算cat = 17。这会将`cat`的值设置为17,并且cat = 17的值也是17
步骤2:然后计算240。240是一个独立的表达式,它的值是240✅第二个表达式
步骤1:先计算cat = 17。这会将cat的值设置为17,并且cat = 17的值是17
步骤2:然后计算240。240是一个独立的表达式,它的值是240
结果:逗号表达式的值是240,因为逗号表达式的值是最后一个子表达式的值
最终结果:由于整个表达式被括号包围,它的值是240。因此,cat的值最终被设置为240
总结
这里的循环章节就没有全部写完了,博主看了一下后面,其实是一些不常用的,等到开发阶段遇到那些问题再来学也没问题,我们下一节直接启动类与面向对象
我们学习
for循环的关键词语
新增语法
明显表达式和不明显表达式
副作用表达式
副作用和顺序点的概念
前缀与后缀的效率在for循环与不同点
逗号运算符的作用
相关文章:
C++ primer plus 第五节 循环
系列文章目录 C primer plus 第一节 步入C-CSDN博客 C primer plus 第二节 hello world刨析-CSDN博客 C primer plus 第三节 数据处理-CSDN博客 C primer plus 第四节 复合类型-CSDN博客 文章目录 系列文章目录 文章目录 前言 一 for循环 总结 前言 由于作者看了后面的内容&…...
使用Hydra进行AI项目的动态配置管理
引言:机器学习中的超参数调优挑战 在机器学习领域,超参数调优是决定模型性能的关键环节。不同的模型架构,如神经网络中的层数、节点数,决策树中的最大深度、最小样本分割数等;以及各种训练相关的超参数,像学习率、优化器类型、批量大小等,其取值的选择对最终模型的效果…...
.bash_profile一些笔记
下方ffmpeg目录为/Users/sin/Downloads/kakaaaaa/bin/ffmpeg 第一种方法冒号后拼接路径 第二种方法冒号后拼接变量 第三种方法,依旧用PATH变量拼接,更清晰美观而已 export的作用 权限问题: 确保 /Users/sin/Downloads/kaka/bin/ffmpeg 有可执行权限(通…...
数据虚拟化的中阶实践:从概念到实现
数据虚拟化的中阶实践:从概念到实现 在大数据时代,数据的数量、种类和来源呈现爆炸式增长,如何高效、灵活地访问和利用这些数据成为了企业面临的重要问题。数据虚拟化作为一种创新的技术,正逐渐成为解决这一难题的关键。它通过抽象化层将底层数据源与应用程序隔离,使得数…...
MongoDB安全管理
MongoDB如何鉴权 保证数据的安全性是数据库的重大职责之一。与大多数数据库一样,MongoDB内部提供了一套完整的权限防护机制。如下例所示: mongo --host 127.0.0.1 --port 27017 --username someone --password errorpass --authenticationDatabasestor…...
[STM32]从零开始的STM32 DEBUG问题讲解及解决办法
一、前言 最近也是重装了一次keil,想着也是重装了,也是去官网下载了一个5.41的最新版,在安装和配置编译器和别的版本keil都没太大的区别,但是在调试时,遇到问题了,在我Debug的System Viewer窗口中没有GPIO&…...
创建Order项目实现Clean Hexagonal架构
创建Order项目实现Clean & Hexagonal架构 前言 在上一节中,讲到了Clean & Hexagonal架构的理论部分,并且通过图形解释了从MVC架构到清洁架构到演变。下面我们通过创建项目的方式来进一步理解Clean & Hexagonal架构。 1.项目创建 1. 项目…...
【算法】图论 —— Floyd算法 python
洛谷 B3647 【模板】Floyd 题目描述 给出一张由 n n n 个点 m m m 条边组成的无向图。 求出所有点对 ( i , j ) (i,j) (i,j) 之间的最短路径。 输入格式 第一行为两个整数 n , m n,m n,m,分别代表点的个数和边的条数。 接下来 m m m 行,每行三…...
YOLOv5 + SE注意力机制:提升目标检测性能的实践
一、引言 目标检测是计算机视觉领域的一个重要任务,广泛应用于自动驾驶、安防监控、工业检测等领域。YOLOv5作为YOLO系列的最新版本,以其高效性和准确性在实际应用中表现出色。然而,随着应用场景的复杂化,传统的卷积神经网络在处…...
基于fast-whisper模型的语音识别工具的设计与实现
目录 摘 要 第1章 绪 论 1.1 论文研究主要内容 1.1.1模型类型选择 1.1.2开发语言的选择 1.2 国内外现状 第2章 关键技术介绍 2.1 关键性开发技术的介绍 2.1.1 Faster-Whisper数据模型 2.1.2 Django 第3章 系统分析 3.1 构架概述 3.1.1 功能构架 3.1.2 模块需求描述 3.2 系统开…...
python中单例模式应用
数据库连接池单例模式 1. 为什么使用单例模式 创建数据库连接是一个昂贵的过程(涉及网络通信、认证等)。单例模式的连接池可以在程序启动时初始化一组连接,并在整个生命周期中重用这些连接,而不是每次请求都新建连接。同时还可…...
鸿蒙HarmonyOS 开发简介
鸿蒙开发入门教程 一、技术简介 鸿蒙操作系统(HarmonyOS)是面向万物互联时代的全场景分布式操作系统,具备分布式软总线、分布式数据管理、分布式任务调度等核心能力,能让设备间实现无缝连接与协同,为用户提供统一、流…...
2. 在后端代码中加入日志记录模块
1. 说明 日志模块基本上是每一个软件系统开发中必不可少的,主要用于持久记录一些代码运行中的输出信息,辅助编码人员进行代码调试,以及后期软件上线运行报错分析。在Python中加入日志模块比较简单,只需要借助logging和RotatingFi…...
Linux软硬链接
目录 什么是软链接?软链接的特点软链接的原理什么是硬链接硬链接的特点硬链接的原理 什么是软链接? 在Linux操作系统中,文件系统的核心概念之一是链接,包括软链接(符号链接)和硬链接。这些链接提供了访问文…...
Kali换源
【刚忘了】 下面这个 里面的一删放就好了 deb http://mirrors.aliyun.com/kali kali-rolling main non-free contribdeb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib...
Java 大视界 -- Java 大数据机器学习模型的可解释性增强技术与应用(107)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
SYN Flood的攻击原理及防御
SYN Flood的攻击原理 TCP 协议是一个可靠的、面向连接的流协议,由于 TCP 协议是建立在 IP 协议这种面向无连接的协议,所以 TCP 协议必须自己来维护连接的状态 TCP的三次握手过程 建立连接三次握手过程如下: 客户端需要发送一个 SYN包 给服…...
Javaweb数据库多表查询 内连接 外连接 子查询
内连接 外连接 左外连接,左边是全部表 表名,即使没有匹配右边的数据,也要查询出来 子查询 案例 1.没有说所有的部门,所有的员工,用内连接(隐式内连接)...
绕过 RAG 实时检索瓶颈,缓存增强生成(CAG)如何助力性能突破?
编者按: 你是否曾经遇到过这样的困扰:在开发基于 RAG 的应用时,实时检索的延迟让用户体验大打折扣?或者在处理复杂查询时,检索结果的不准确导致回答质量不尽如人意? 在当前大语言模型应用大规模落地的背景下…...
Nginx系列09(Nginx 与其他服务集成、实战项目)
目录 Nginx 与其他服务集成 实战项目 Nginx 与其他服务集成 Nginx 与 Tomcat 集成 概念:将 Nginx 作为前端代理服务器,Tomcat 作为后端应用服务器。Nginx 负责处理静态资源请求、负载均衡以及将动态请求转发给 Tomcat,Tomcat 则专注于运行…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...
起重机起升机构的安全装置有哪些?
起重机起升机构的安全装置是保障吊装作业安全的关键部件,主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理: 一、超载保护装置(核心安全装置) 1. 起重量限制器 功能:实时监测起升载荷&a…...
