21天学会C++:Day8----范围for与nullptr
目录
编辑
1. 范围for
2. nullptr
1. 范围for
我们在写C语言循环遍历代码的时候,无论是用 for循环,while循环都需要考虑循环的起始条件,循环变量的递增逻辑,循环的结束条件。麻烦不说还可能会出错。
int main()
{int arr[] = { 1, 2, 3, 4, 5 };for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){cout << arr[i] << " ";}cout << endl;
}
为了简化单纯做遍历操作时的代码,C++引入了一个名叫范围for的东东,就是一个语法糖。
有了范围for我们遍历arr数组就可以这样书写代码:
int main()
{int arr[] = { 1, 2, 3, 4, 5 };for (int e : arr){cout << e << " ";}cout << endl;
}
无论如何是比直接些for循环舒服多了。
我们来看看语法:
for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量, 第二部分则表示被迭代的范围。
在数组中被迭代的范围就是数组第一个元素到最后一个元素。如果是其他的数据结构,比如stl中的list等等,底层都是使用迭代器来实现的。(迭代器我们后面才会讲解哦,先随便看看吧)
int main()
{list<int> l; //双向的链表l.push_back(1);l.push_back(2);l.push_back(3);l.push_back(4);l.push_back(5);for (int e : l){cout << e << " ";}cout << endl;
}
范围for括号的最前面是容器里面元素的类型,你如果不想写可以用去偷关键字替代。像下面的代码这样,就更加方便了。
int main()
{int arr[] = { 1, 2, 3, 4, 5 };for (auto e : arr){cout << e << " ";}cout << endl;
}
2. nullptr
我们思考一下为什么C语言有NULL了,为什么C++还要引入nullptr呢?座位面试的常考题,大家可要仔细想一想。
NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码:
#define NULL ((void *)0)
他是将0强制转化为了无类型的指针,使得NULL可能存在多种定义!到底是0呢,还是个无类型的指针呢?让我们看看下面的代码:
void f(int)
{cout << "f(int)" << endl;
}void f(int*)
{cout << "f(int*)" << endl;
}int main()
{f(0); //f(int)f(NULL); //f(int)f((int*)NULL); //f(int*)return 0;
}
f(NULL)调用的函数是不是很奇怪,我们本来是想让他调用f(int*)的,但是由于NULL的定义导致程序背离了我们的意图。这就是NULL的缺陷。
在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器默认情况下 将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void *)0。
于是C++引入了nullptr关键字,注意是关键字。nullptr是一个空指针类型,仅仅使用nullptr表示空指针。而NULL却可以代表0。
注意:
1. 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的。
2. 在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。
3. 为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。
相关文章:
21天学会C++:Day8----范围for与nullptr
目录 编辑 1. 范围for 2. nullptr 1. 范围for 我们在写C语言循环遍历代码的时候,无论是用 for循环,while循环都需要考虑循环的起始条件,循环变量的递增逻辑,循环的结束条件。麻烦不说还可能会出错。 int main() {int arr[]…...
Linux——环境变量
✅<1>主页::我的代码爱吃辣 📃<2>知识讲解:Linux——环境变量 ☂️<3>开发环境:Centos7 💬<4>前言:环境变量(environment variables)一般是指在操作系统中用来指定操作…...
Screen的详细全面安装教程及Screen的用法
Screen可以大大提高终端使用效率,是Linux系统管理和运维的必备技能。当我们开启Screen后,只要Screen进程没有终止,其内部运行的会话都可以恢复。即使网络连接中断,用户也可以重新进入已开启的Screen中,对中断的会话进行…...
生成树、Prufer序列的计数问题:0912T1
看到生成树计数,很容易想到生成树计数 然后发现每个点有度数限制,我们可以先考虑枚举每个点的度数(也可以是Prufer 序列中的出现次数) 假设出现次数为 a a a,可以得出其生成树方案为 n ! ∏ ( a i − 1 ) ! \frac{…...
SQL_牛客网_SQL264_求每个登陆日期的次日留存率
牛客每个人最近的登录日期(五) 牛客每天有很多人登录,请你统计一下牛客每个日期新用户的次日留存率。 有一个登录(login)记录表,简况如下: id user_id client_id date 1 2 1 2020-10-12 2 3 2 2020-10-12 3 1 2 2020-10-…...
Hive 基础知识
目录 1.基础概念1.1 定义1.2 组件1.3 元数据1.4 内部表和外部表 2. Hive与关系型数据库的对比3. Hive 数据存储4. 参考文献 1.基础概念 1.1 定义 Hive是一个基于Hadoop的数据仓库基础设施工具,它可以将结构化的数据文件映射为一张数据库表,并提供类SQL查…...
【数据结构】树的基础知识及三种存储结构
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
ABB 3BHB003688R0101接口模块
通信接口:接口模块通常具有多种通信接口,如以太网、串行通信、Modbus、Profibus等,以便与其他设备和系统进行数据交换。 协议支持:它们支持各种通信协议,确保与不同制造商的设备和控制系统兼容。 数据转换和适配&…...
精简 jre 涉坑记录
主要参考:https://zhuanlan.zhihu.com/p/91496457 主要问题: 1)jre 中有 client 和 server 之分。参考:关于JDK的Server和Client模式的切换_jacksonary的博客-CSDN博客 2)对 copy 出来的 rt 进行打 zip 包时&#x…...
Java程序员学习算法路线规划总结
文章目录 前言:必须清楚得基本数据结构:1.需掌握哪些算法?2.学习步骤以及路线 前言:必须清楚得基本数据结构: 数组(Array) 链表(Linked List) 栈(Stack&…...
火山引擎 ByteHouse:两个关键技术,揭秘 OLAP 引擎中的数据导入技术
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 数据导入是衡量 OLAP 引擎性能及易用性的重要标准之一,高效的数据导入能力能够加速数据实时处理和分析的效率。 作为一款 OLAP 引擎,火山引…...
深挖“范围经济”穿越产业周期:TCL电子持续繁荣的密码
作者 | 曾响铃 文 | 响铃说 1878年,爱迪生创立了爱迪生电灯公司,14年后,摩根将该公司与另外两家合并成通用电气公司(GE)。 从一个小小的碳丝直流电灯泡开始,历经数次改弦更张,穿越两次世界大…...
Elasticsearch:使用 ESRE 和生成式 AI 了解 TLS 日志错误
作者:DAVID HOPE 本博客介绍了 Elasticsearch 相关性引擎 (ESRE) 及其 Elastic Learned Sparse Encoder 功能的新颖应用,特别是在日志分析中。 最近发布的 Elasticsearch Relevance Engine™ (ESRE™) 包含一系列重要功能,可增强搜索能力…...
Swing程序设计(3)JDialog窗体
文章目录 前言一、JDialog窗体的介绍二、JDialog窗体的使用 1.JDialog的常用构造方法2.实例展示及分析总结 前言 JDialog窗体是窗体中的另一种类型的窗体,指对话框窗体。与JFrame窗体类似,绝大部分对于JFrame窗体使用的方法,对于JDialog窗体也…...
类和对象(1)
文章目录 1.面向过程和面向对象初步认识2.类的引入3.类的定义4.类的访问限定符和封装4.1访问限定符4.2封装 5.类的作用域6.类的实例化6.2结构体内存对齐规则 7.this指针7.2this指针的特性 封装(补充) 1.面向过程和面向对象初步认识 C面向对象但不纯面向…...
学会用命令行创建uni-app项目并用vscode开放项目
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 创建 uni-app 项目 命令行创建 uni-app 项目 编译和运行 uni-app 项目: 用 VS Code 开发 uni…...
java.lang.ClassCastException: android.os.BinderProxy cannot be cast to ...
项目开发遇到下面这个报错了! 问题原因 直接说原因,就是因为进程间不能直接传递对象,应该传递该Binder对象的映射(代理对象),所以类型转换就出错了。如果在同一个进程中,直接传递对象没有关系&a…...
AIGC(生成式AI)试用 3 -- 专业主题
何为专业? 主要研究某种学业或从事某种事业 我的理解可能是在某个方向、某个行业,专业的更靠谱、说了更算、表达的更晰,结果更有说服力 本次提问:你我的专业 生成式AI知道你我的专业吗?生成式AI如何诠释你…...
rsyslog-日志管理 logrotate-日志轮转
日志的管理的方式,以及怎么自己写一个管理日志的小脚本,其实也不能算脚本 管理日志的进程 rsyslogd:绝大部分日志记录,和系统操作有关,安全,认证sshd,su,计划任务at,cron… httpd/nginx/mysql: …...
类和对象续
目录 包 自定义包 包的访问权限控制 常见的包 Static成员 静态成员变量 静态成员方法 代码块 构造块 静态块 重写 继承 继承是啥? 父类成员访问 子类中访问父类成员变量 两者不同名 两者同名 子类中访问父类对的成员方法 super 子类构造方法 …...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

