嵌入式入门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…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...
