嵌入式入门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

  1. 在C++中, 向终端输出数据,使用的是ostream提供的一个类对象 cout,搭配<<插入运算符使用
  2. cout输出数据时,不需要使用格式控制符,会自动识别要输出的数据的数据类型
  3. cout输出数据时,可以级联输出数据,级联输出时,需要使用多个插入运算符

cin

  1. 在C++中输入使用的是istream提供的一个类对象 cin,搭配>>提取运算符使用
  2. 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;
}

命名空间

  1. 命名空间是防止在多人协同开发过程中出现命名冲突的问题
  2. 相当于给定义的变量名函数名等标识符取一个“姓氏”

使用方法

  1. 使用时单独标注命名空间
  2. 为单个标识符声明,声明后将不需要为这个变量标注他的命名空间
  3. 直接声明整个命名空间,声明后每一个标识符都不需要再单独标志的了

#include <iostream>

int main()
{
	//方法1
	std::cout << "hello" << std::endl;
	//方法2
	using std::cout;
	cout << "hello" << std::endl; 	//此处cout已经声明不需要标注命名空间,而endl需要
	//方法3
	using 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; //输出520
	cout << ::num << endl; //输出1314
	return 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的功能

常用的成员变量

  1. size()或者length():求该字符串的实际长度
  2. 访问字符串的成员
    • 使用成员函数 at() 完成,会进行下标越界检查
    • 使用中括号运算符完成,不进行下标越界检查
  3. 判空:empty(),如果字符串为空,则返回真,否则返回假
  4. 清空:clear() 将当前字符串清空
  5. 尾插:push_back() 在字符串尾部插入一个字符
  6. 尾删:pop_back() 删除字符串尾部的那个字符

输入方法

  1. 不带空格的字符串可以直接使用cin输入
  2. 带空格的字符串需要使用函数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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg音视频流媒体,视频编解码性能优化

你是不是也有过这样一个疑问&#xff1a;视频如何从一个简单的文件变成你手机上快速播放的短片&#xff0c;或者是那种占满大屏幕的超高清大片&#xff1f;它背后的法宝&#xff0c;离不开一个神奇的工具——FFmpeg&#xff01;说它强大&#xff0c;完全不为过&#xff0c;它在…

LIO-SAM代码解析:mapOptmization.cpp(一)

文章目录 主流程1. loopInfoHandler1.1 updateInitialGuess1.2 extractSurroundingKeyFrames1.3 downsampleCurrentScan1.4 scan2MapOptimization1.5 saveKeyFramesAndFactor1.6 correctPoses1.7 publishOdometry 1.8 publishFrames 主流程 1. loopInfoHandler 1.1 updateInit…

Django学习笔记之数据库(一)

文章目录 安装一、数据库配置二、基本操作步骤1.增加2.查看3.排序4.更新5.删除数据 三、一对多&#xff0c;多对多&#xff0c;一对一1.一对多1.一对一1.多对多 四、查询操作五、聚合操作六、F和Q操作 安装 首先就是安装Mysql和Navicat。 一、数据库配置 其实整个就是连接前端…

《分布式光纤传感:架设于桥梁监测领域的 “智慧光网” 》

桥梁作为交通基础设施的重要组成部分&#xff0c;其结构健康状况直接关系到交通运输的安全和畅通。随着桥梁建设规模的不断扩大和服役年限的增长&#xff0c;桥梁结构的安全隐患日益凸显&#xff0c;传统的监测方法已难以满足对桥梁结构健康实时、全面、准确监测的需求。分布式…

什么是顶级思维?

在现代社会&#xff0c;我们常常听到“顶级思维”这个概念&#xff0c;但究竟什么才是顶级思维&#xff1f;它又是如何影响一个人的成功和幸福呢&#xff1f;今天&#xff0c;我们就来探讨一下顶级思维的几个关键要素&#xff0c;并分享一些实用的生活哲学。 1. 身体不适&…

更新Office后,LabVIEW 可执行程序生成失败

问题描述&#xff1a; 在计算机中&#xff0c;LabVIEW 开发的源程序运行正常&#xff0c;但在生成可执行程序时提示以下错误&#xff1a; ​ A VI broke during the build process from being saved without a block diagram. Either open the build specification to include…

Domain Adaptation(李宏毅)机器学习 2023 Spring HW11 (Boss Baseline)

1. 领域适配简介 领域适配是一种迁移学习方法,适用于源领域和目标领域数据分布不同但学习任务相同的情况。具体而言,我们在源领域(通常有大量标注数据)训练一个模型,并希望将其应用于目标领域(通常只有少量或没有标注数据)。然而,由于这两个领域的数据分布不同,模型在…

25年无人机行业资讯 | 1.1 - 1.5

25年无人机行业资讯 | 1.1 - 1.5 中央党报《经济日报》刊文&#xff1a;低空经济蓄势待发&#xff0c;高质量发展需的平衡三大关系 据新华网消息&#xff0c;2025年1月3日&#xff0c;中央党报《经济日报》发表文章指出&#xff0c;随着国家发展改革委低空经济发展司的成立&a…

AI刷题-数位长度筛选问题、数值生成与运算问题

目录 一、数位长度筛选问题 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 关键点 最终代码&#xff1a; 运行结果&#xff1a; 二、数值生成与运算问题 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤…

Qiskit快速编程探索(进阶篇)

五、量子电路模拟:探索量子世界的虚拟实验室 5.1 Aer模拟器:强大的模拟引擎 在量子计算的探索旅程中,Aer模拟器作为Qiskit的核心组件之一,宛如一座功能强大的虚拟实验室,为开发者提供了在经典计算机上模拟量子电路运行的卓越能力。它打破了硬件条件的限制,使得研究者无…

转运机器人在物流仓储行业的优势特点

在智能制造与智慧物流的浪潮中&#xff0c;一款革命性的产品正悄然改变着行业的面貌——富唯智能转运机器人&#xff0c;它以卓越的智能科技与创新的设计理念&#xff0c;引领着物流领域步入一个全新的高效、智能、无人的时代。 一、解放双手&#xff0c;重塑物流生态 富唯智能…

开源项目stable-diffusion-webui部署及生成照片

参考链接 https://www.freedidi.com/13133.html 基础环境部署 python 官网链接 Python Release Python 3.10.6 | Python.org 下载 Python 3.10.6 版本安装包 下载好后双击 点击安装&#xff0c;这里需要选择一下&#xff0c;把环境变量加上。&#xff08;这里是默认安装到C盘…

Linux:进程概念(二.查看进程、父进程与子进程、进程状态详解)

目录 1. 查看进程 1.1 准备工作 1.2 指令&#xff1a;ps—显示当前系统中运行的进程信息 1.3 查看进程属性 1.4 通过 /proc 系统文件夹看进程 2. 父进程与子进程 2.1 介绍 2.2 getpid() \getppid() 2.3 fork()函数—通过系统调用创建进程 fork()函数疑问 3. 进程状态…

STM32 : PWM 基本结构

这张图展示了PWM&#xff08;脉冲宽度调制&#xff09;的基本结构和工作流程。PWM是一种用于控制功率转换器输出电压的技术&#xff0c;通过调整信号的占空比来实现对负载的精确控制。以下是详细讲解&#xff1a; PWM 基本结构 1. 时基单元 ARR (Auto-reload register): 自动…

ElasticSearch 认识和安装ES

文章目录 一、为什么学ElasticSearch?1.ElasticSearch 简介2.ElasticSearch 与传统数据库的对比3.ElasticSearch 应用场景4.ElasticSearch 技术特点5.ElasticSearch 市场表现6.ElasticSearch 的发展 二、认识和安装ES1.认识 Elasticsearch&#xff08;简称 ES&#xff09;2.El…

如何用 ESP32-CAM 做一个实时视频流服务器

文章目录 ESP32-CAM 概述ESP32-S 处理器内存Camera 模块MicroSD 卡槽天线板载 LED 和闪光灯其他数据手册和原理图ESP32-CAM 功耗 ESP32-CAM 引脚参考引脚排列GPIO 引脚哪些 GPIO 可以安全使用&#xff1f;GPIO 0 引脚MicroSD 卡引脚 ESP32-CAM 的烧录方式使用 ESP32-CAM-MB 编程…

UE5中制作地形材质

在创作大场景内容时&#xff0c;地形的设计和优化是至关重要的一步。利用UE中的地形系统&#xff0c;开发者能够高效地创建复杂的地形形态&#xff0c;同时保持游戏的性能和视觉效果。 1.在创建地形之前&#xff0c;先新建一个地形使用的混合材质球&#xff0c;添加节点Landsc…

通过 route 或 ip route 管理Linux主机路由

目录 一&#xff1a;route 使用说明1、查看路由信息2、删除指定路由3、增加指定路由 二&#xff1a;ip route 使用说明1、查看主机路由2、新增主机路由3、删除主机路由 通过route 或者ip route修改Linux主机路由后属于临时生效&#xff0c;系统重启后就恢复默认值了&#xff0c…

数据结构C语言描述11(图文结合)--二叉搜索树(BST树)的实现(数据采用KV存储形式进行封装)

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法&#xff1b;有C基础即可跟着学习&#xff0c;代码均可运行&#xff1b;准备考研的也可跟着写&#xff0c;个人感觉&#xff0c;如果时间充裕&#xff0c;手写一遍比看书、刷题管用很多&#xff0c;这也是本人采用纯C语言…

rabbitmq的三个交换机及简单使用

提前说一下&#xff0c;创建队列&#xff0c;交换机&#xff0c;绑定交换机和队列都是在生产者。消费者只负责监听就行了&#xff0c;不用配其他的。 完成这个场景需要两个服务哦。 1直连交换机-生产者的代码。 在配置类中创建队列&#xff0c;交换机&#xff0c;绑定交换机…