嵌入式入门Day38
C++ Day1
- 第一个C++程序
- C++中的输入输出
- 输出操作
- cout
- cin
- 练习
- 命名空间
- 使用方法
- 自定义命名空间
- 冲突问题
- C++对字符串的扩充
- C++风格字符串的使用
- 定义以及初始化
- C++风格字符串与C风格字符串的转换
- C++风格的字符串的关系运算
- 常用的成员变量
- 输入方法
- 布尔类型
- C++对堆区空间使用的扩充
- 作业
第一个C++程序
#include <iostream>using namespace std;
//命名空间的声明语句
//using:使用命名空间的关键字
//namespace:命名空间的关键字
//std:标准命名空间,系统提供的所有名字,都放放入到该命名空间中int main() //默认无参的主程序
{cout << "Hello World!" << endl;//使用iostream中的类对象cout输出数据hello world// <<:插入运算符(不是左移运算),C++重载的运算符,与cout搭配用于输出// endl:end line,结束该行,即换行return 0;
}
C++中的输入输出
输出操作
cout
- 在C++中, 向终端输出数据,使用的是ostream提供的一个类对象 cout,搭配<<插入运算符使用
- cout输出数据时,不需要使用格式控制符,会自动识别要输出的数据的数据类型
- cout输出数据时,可以级联输出数据,级联输出时,需要使用多个插入运算符
cin
- 在C++中输入使用的是istream提供的一个类对象 cin,搭配>>提取运算符使用
- cin输入的时候也不需要使用格式控制符,会自动识别
练习
使用cout输出斐波那契数列前20项
#include <iostream>using namespace std;int main()
{//初始化斐波那契数列前两项int numb[20] = {1 ,1};int i = 0;//后面的项均为前两项的和for( i = 2; i < 20; i++){numb[i] = numb[i - 1] + numb[i - 2];}//循环输出for( i = 0; i < 20; i++){cout << numb[i] << '\t';}cout << endl;return 0;
}
命名空间
- 命名空间是防止在多人协同开发过程中出现命名冲突的问题
- 相当于给定义的变量名函数名等标识符取一个“姓氏”
使用方法
- 使用时单独标注命名空间
- 为单个标识符声明,声明后将不需要为这个变量标注他的命名空间
- 直接声明整个命名空间,声明后每一个标识符都不需要再单独标志的了
#include <iostream>int main()
{//方法1std::cout << "hello" << std::endl;//方法2using std::cout;cout << "hello" << std::endl; //此处cout已经声明不需要标注命名空间,而endl需要//方法3using namespace std;cout << "hello" << endl; //整个空间均被声明,都可以直接使用return 0;
}
自定义命名空间
//定义格式
namespace 空间名 {... //各种定义
}
同一作用域下,可以定义多个重名的命名空间,他们都将会是同一空间,里面的变量名等不允许相同
冲突问题
如果不加命名空间标识的话,当声明的命名空间之中,或者和局部变量以及全局变量有冲突的时候,就不能使用后两种方法来访问了,只能用方法1标识此时使用的到底是哪个命名空间里面的变量
本文件中的局部变量和全局变量都默认放入匿名命名空间中
#include <iostream>namespace EKKO {int num = 520;
}
using namespace std;int main(void)
{int num = 1314;using namespace EKKO;//此后有两个num,使用是必须标注命名空间cout << EKKO::num << endl; //输出520cout << ::num << endl; //输出1314return 0;
}
C++对字符串的扩充
C语言中没有字符串类型,所有字符串的操作都是使用字符数组进行的
C++中也支持这种字符串,并且扩充了字符串类型string,使用时需要引入头文件 string
C++风格字符串的使用
定义以及初始化
#include <iostream>
#include <string>using namespace std;int main(void)
{//定义字符串string s1; cout << s1 << endl; //默认是空串//定义并初始化字符串string s2 = "HELLO";//C++风格的字符串支持使用=直接赋值//下面是其他的初始化方法string s3 = {"HELLO"};string s4("HELLO");string s5(5, 'A'); //该串的内容为:AAAAA//赋值操作s1 = "与众不同";//可以直接赋值s1 = s2+s3; //将会把s3拼接到s2后面并赋值给s1//注意使用字符串的加法操作时,必须有一个是字符串变量,如果两个都是字符串常量的话将会报错return 0;
}
C++风格字符串与C风格字符串的转换
#include <iostream>
#include <string>
#include <cstring> //同#include <string.h>
using namespace std;
int main(void)
{char str[20] = "Hello";//C风格可以直接转换为C++风格string s = str;//C++风格转换到C风格则需调用成员函数strcpy( str, s1.c_str());strcpy( str, s1.data());//两个成员函数的返回值都是 char *类型,指向字符串的开头,这样才符合C风格的使用方法//本质上而言就是C风格的函数无法识别string类,需要一个char *类型的参数return 0;
}
C++风格的字符串的关系运算
C++风格的字符串可以直接使用关系运算符
== 即可完成以前strcmp的功能
常用的成员变量
- size()或者length():求该字符串的实际长度
- 访问字符串的成员
- 使用成员函数 at() 完成,会进行下标越界检查
- 使用中括号运算符完成,不进行下标越界检查
- 判空:empty(),如果字符串为空,则返回真,否则返回假
- 清空:clear() 将当前字符串清空
- 尾插:push_back() 在字符串尾部插入一个字符
- 尾删:pop_back() 删除字符串尾部的那个字符
输入方法
- 不带空格的字符串可以直接使用cin输入
- 带空格的字符串需要使用函数getline()来完成
布尔类型
C++添加的新类型,是基本数据类型
bool类型的值只有两个:true、false
以上三个单词均为C++新添加的关键词
默认输入时bool类型只会输出0或者1,使用boolalpha关键字来修改cout可以设置为单词输出输出为true或者false,使用noboolalpha来取消
bool类型占一个字节
C++对堆区空间使用的扩充
引入了两个新的关键字来申请和释放堆区空间
new 和 delete
申请方法
//数据类型 *指针名 = new 数据类型; new是基于数据类型大小来申请的,而不是malloc的根据字节数来申请
int *p = new int;
//申请并且初始化
double *dptr = new double(3.13);
float *fptr = new float{33.33};//连续空间的申请
int *ptr = new int[5];
//连续申请并且初始化
int *sptr = new int[5]{1,2,3,4,5};//释放堆区空间
delete p;
p = NULL;
delete dptr;
dptr = NULL;
delete fptr;
fptr = NULL;
delete [] ptr;
ptr = NULL;
delete [] sptr;
sptr = NULL;
作业
要求在堆区连续申请5个int的大小空间用于存储5名学生的成绩,分别完成空间的申请、成绩的录入、升序排序、成绩输出函数以及空间释放函数
#include <iostream>
#include <string>using namespace std;int main()
{//空间申请int *ptr = new int[5];//信息提示cout << "请输入学生的成绩:";//循环输入for(int i = 0; i < 5; i++) {cin >> ptr[i];}//冒泡排序for(int i = 0; i < 5; i++){for(int j = 1; j < 5-i; j++){if(ptr[j] > ptr[j-1]){int temp = ptr[j];ptr[j] = ptr[j-1];ptr[j-1] = temp;}}}//输出成绩for(int i = 0; i < 5; i++){cout << ptr[i] << " ";}cout << endl;//释放堆区空间delete [] ptr;ptr = NULL;return 0;
}
相关文章:

嵌入式入门Day38
C Day1 第一个C程序C中的输入输出输出操作coutcin练习 命名空间使用方法自定义命名空间冲突问题 C对字符串的扩充C风格字符串的使用定义以及初始化C风格字符串与C风格字符串的转换C风格的字符串的关系运算常用的成员变量输入方法 布尔类型C对堆区空间使用的扩充作业 第一个C程序…...
探索Rancher服务发现机制:容器世界的“导航仪”
《探索Rancher服务发现机制:容器世界的“导航仪”》 在当今容器化技术蓬勃发展的时代,容器的大规模部署和微服务架构的广泛应用使得服务之间的相互发现与通信变得至关重要。Rancher作为一款功能强大的容器管理平台,其服务发现机制宛如一座无…...
【ROS2】Qt事件循环和ROS2订阅机制一起使用有什么注意事项?
1、简述 Qt的事件循环和ROS订阅回调函数都可能在阻塞函数中运行, 例如:Qt的QApplication::exec() 和 ROS的rclcpp::spin() 两个阻塞函数不能在同一个线程中使用,如果使用不当,会造成Qt不处理事件或者ROS2不处理订阅的回调函数。 2、多线程 一般 QApplication::exec() 运…...

donet (MVC)webAPI 的接受json 的操作
直接用对象来进行接收,这个方法还不错的。 public class BangdingWeiguiJiluController : ApiController{/// <summary>/// Json数据录入错误信息/// </summary>/// <param name"WeiguiInfos"></param>/// <returns></r…...
Qt 界面外观
一、前言 1、 一个完善的应用程序,不仅应该有实用的功能,还要有一个漂亮的外观,这样才能使应用程序更加友好,更加吸引用户。 2、 作为一个跨平台的UI开发框架,Qt提供了强大而灵活的界面外观设计机制。 3、 本篇会讲解&…...

aws(学习笔记第二十二课) 复杂的lambda应用程序(python zip打包)
aws(学习笔记第二十二课) 开发复杂的lambda应用程序(python的zip包) 学习内容: 练习使用CloudShell开发复杂lambda应用程序(python) 1. 练习使用CloudShell CloudShell使用背景 复杂的python的lambda程序会有许多依赖的包,如果不提前准备好这些python的…...
HTML课堂之搜索工具箱/讲师duluo
目录: 源码在最后 小提示: 1.养成打卡习惯没日多加练习即可提什能力 2.源码在最后,请先看完代码讲解,在尝试自己写,这样容易掌握 3.请勿复制粘贴,因为你没掌握,即使复制粘贴也学不会 课堂重点笔…...

当歌 - RSS 订阅分发平台开发
以下将详细介绍当歌平台的技术架构、功能实现以及相关代码逻辑。 一、项目概述 当歌是一个极简的 RSS 订阅分发平台,旨在为用户提供便捷的 RSS 管理和订阅服务,帮助用户轻松获取和分享最新资讯。 二、技术架构 后端语言:PHP 数据库&#…...

学习threejs,导入wrl格式的模型
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.VRMLLoader wrl模型加…...

使用GitLab+Jenkins搭建CICD执行环境
使用GitLabJenkins搭建CI\CD执行环境 前言什么是DevOps?什么是CI/CD?使用GitLabJenkins搭建CI\CD执行环境GitLab安装1. 安装和配置所需的依赖2. 下载并安装极狐GitLab3. 登录极狐GitLab 实例4.常用gitlab指令5.修改密码 Jenkins安装1.Jenkins 的主要特点…...
使用vue-pdf预览pdf和解决pdf电子签章显示问题
使用vue-pdf预览pdf和解决pdf电子签章显示问题 第一步:npm install vue-pdf 第二步页面使用vue-pdf <template><div class"pdf1"><Pdf v-for"i in numPages" :key"i" :src"src" :page"i" />…...

【Rust自学】11.3. 自定义错误信息
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.3.1. 添加错误信息 在 11.2. 断言(Assert) 中我们学习了assert!、assert_eq!和assert_ne!这三个宏,而这篇文章讲的就是它…...
05、Docker学习,常用安装:Mysql、Redis、Nginx、Nacos
Docker学习,常用安装:Mysql、Redis、Nginx、Nacos 一、Docker安装Mysql 1、docker search mysql ##查找mysql版本都有哪些 2、docker pull mysql:5.6 ##下载5.6版本的mysql镜像 3、docker run -p 13306:3306 --name mysql ##运行…...

RabbitMQ高级篇之MQ可靠性 数据持久化
文章目录 消息丢失的原因分析内存存储的缺陷如何确保 RabbitMQ 的消息可靠性?数据持久化的三个方面持久化对性能的影响持久化实验验证性能对比Spring AMQP 默认持久化总结 消息丢失的原因分析 RabbitMQ 默认使用内存存储消息,但这种方式带来了两个主要问…...
leetcode 2274. 不含特殊楼层的最大连续楼层数 中等
Alice 管理着一家公司,并租用大楼的部分楼层作为办公空间。Alice 决定将一些楼层作为 特殊楼层 ,仅用于放松。 给你两个整数 bottom 和 top ,表示 Alice 租用了从 bottom 到 top(含 bottom 和 top 在内)的所有楼层。另…...

Tauri教程-基础篇-第二节 Tauri的核心概念上篇
“如果结果不如你所愿,就在尘埃落定前奋力一搏。”——《夏目友人帐》 “有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。”——《十宗罪》 “维持现状意味着空耗你的努力和生命。”——纪伯伦 Tauri 技术教程 * 第四章 Tauri的基础教程 第二节…...
大风车excel:怎么把题库导入excel?题库导入excel
高效管理试题库:如何批量导入试题到 Excel? 在教育培训、学校管理以及在线学习平台中,试题库的管理是核心工作之一。如何快速、准确地将试题导入到 Excel 表格中,成为许多教育工作者和开发者的迫切需求。本文将围绕“题库导入 Ex…...

Java 兼容读取WPS和Office图片,结合EasyExcel读取单元格信息
在Java开发中,处理Excel文件中的图片(包括浮动图片和嵌入图片)是一个常见的需求。本文将介绍如何使用EasyExcel和Apache POI库来读取Excel文件中的图片,并将其与数据进行关联。 1. 引言 在许多应用场景中,Excel文件不…...

电脑硬盘系统迁移及问题处理
一、系统迁移准备 1、确认你的电脑主板是否支持安装两块硬盘,如电脑主板有多个M2硬盘接口,我们将新硬盘安装到主板上,原来的老硬盘安装在第二个接口上,主板只有一个M2接口的话可以使用移动硬盘盒。 2、新硬盘安装好后,我们进入原来的系统,在 此电脑–右键–管理–磁盘管…...

网关 + Nacos配置管理
网关 网关:就是网络的关口,负责请求的路由、转发、身份校验。 网关路由 新建网关模块gateway引入相关依赖 <!--网关--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...