当前位置: 首页 > news >正文

C++——从C语言快速入门

目录

一、数组

1、声明数组

2、初始化数组

3、访问数组元素

4、示例

5、注意事项

6、数组小练习

计算器支持加减乘除

数组找最大值

二、指针

三、字符串 string 类型


一、数组

在 C++ 中,数组是一种存储固定大小的相同类型元素的序列。数组的所有元素都存储在连续的内存位置上。这种数据结构非常适合于存储具有固定数量和相同数据类型的元素集合。

1、声明数组

声明数组的基本语法如下:

数据类型 数组名[数组大小];

例如,声明一个类型为 int 的数组,包含 10 个元素:

int myArray[10];
2、初始化数组

在声明数组时,您可以同时初始化数组:

int myArray[5] = {10, 20, 30, 40, 50};

如果您在初始化数组时没有指定所有元素的值,未初始化的元素将被自动设置为该数据类型的默认值(对于基本数据类型通常是 0):

int myArray[5] = {10, 20}; // 其余元素将被初始化为 0
3、访问数组元素

您可以通过指定索引来访问数组中的元素。数组索引是从 0 开始的,所以数组的第一个元素是 数组名[0] ,第二个元素是 数组名[1] ,依此类推:

int value = myArray[2]; // 访问第三个元素
4、示例

以下是使用数组的简单示例:

#include <iostream>using namespace std;int main()
{int myArray[5] = {11, 22, 33, 44, 55};// 输出所有数组元素的值for(int i = 0; i < 5; i++){cout << "Element at index " << i << ":" << myArray[i] << endl;}return 0;
}

5、注意事项
  • 数组的大小必须在编译时已知,且不能更改。
  • 数组索引越界是常见的错误,可能会导致未定义的行为。
  • 对于更复杂的用例,您可能需要使用 C++ 的标准模板库(STL)中的容器,如 std::vector ,它提供了可以动态改变大小的数组。
  • 数组的元素存储在连续的内存位置上,这使得访问数组元素非常快。
6、数组小练习
计算器支持加减乘除

1、用C语言思路编写

#include <iostream>using namespace std;int add(int a,int b)
{return a+b;
}int minu(int a,int b)
{return a-b;
}int mul(int a,int b)
{return a*b;
}float diliv(int a,int b)
{return a/b;
}int main()
{int a = 0;int b = 0;char cal;while(1){cout << "请输入两个数: " << endl;cin >> a;cin >> b;cout << "请输入运算符号+、-、*、/" << endl;cin >> cal;switch (cal){case '+':cout << "两数之和是: " << add(a,b) << endl;break;case '-':cout << "两数之差是: " << minu(a,b) << endl;break;case '*':cout << "两数之积是: " << mul(a,b) << endl;break;case '/':cout << "两数之余是: " << diliv(a,b) << endl;break;}}return 0;
}

2、用 Lambda 表达式编写

#include <iostream>using namespace std;int main()
{int a = 0;int b = 0;char cal;auto add = [](int a,int b)->int{return a+b;};auto minu = [](int a,int b)->int{return a-b;};auto mul = [](int a,int b)->int{return a*b;};auto diliv = [](int a,int b)->float{return a/b;};while(1){cout << "请输入两个数: " << endl;cin >> a;cin >> b;cout << "请输入运算符号+、-、*、/" << endl;cin >> cal;switch (cal){case '+':cout << "两数之和是: " << add(a,b) << endl;break;case '-':cout << "两数之差是: " << minu(a,b) << endl;break;case '*':cout << "两数之积是: " << mul(a,b) << endl;break;case '/':cout << "两数之余是: " << diliv(a,b) << endl;break;}}return 0;
}

数组找最大值
#include <iostream>using namespace std;void initArry(int *arry, int len)
{for(int i=0; i< len; i++){cout << "请输入第" << i+1 << "个数" << endl;cin >> arry[i];}
}void printArry(int *arry,int len)
{for(int i=0; i< len; i++){cout << arry[i] << endl;}
}
int getMaxFromArray(int *arry, int len )
{int maxTmp = arry[0];for(int i=0; i< len; i++){if(maxTmp < arry[i])maxTmp = arry[i];}return maxTmp;
}
int main() {int arry[5];int len = sizeof(arry)/sizeof(arry[0]);initArry(arry,len);printArry(arry,len);cout << "最大数是:" << getMaxFromArray(arry,len) << endl;
}

二、指针

C++完全兼容C语言指针,多出一个 this 指针,在面向对象中再讲解。

这里用一个数值交换的简单函数做以示范:

#include <iostream>using namespace std;void swap(int *pa, int *pb)
{int tmp;tmp = *pa;*pa = *pb;*pb = tmp;
}
int main()
{int a = 10;int b = 20;cout << a << endl;cout << b << endl;cout << "两个数发生交换后是:" << endl;swap(&a,&b);cout << a << endl;cout << b << endl;
}

三、字符串 string 类型

C语言中对字符串的表示通常用指针,新手会面临内存泄漏或者段错误等众多问题。

在 C++ 中, string 类是标准库的一部分,用于表示和操作字符串。它是对传统的 C 风格字符串(以空字符 '\0' 结尾的字符数组)的一个更安全、更方便的封装。 string 类是在 <string> 头文件中定义的,并且位于 std 命名空间中

string 类提供了许多有用的功能和特性,包括:

  1. 动态大小:与 C 风格的字符串不同, string 对象可以动态改变大小,这意味着你可以在运行时添加或移除字符,而不需要担心分配和释放内存
  2. 安全性:由于 string 管理其自己的内存,因此减少了内存泄漏和缓冲区溢出的风险。
  3. 方便的成员函数: string 类提供了各种操作字符串的方法,如 append() (添加)、 insert() (插入)、 erase() (删除)、 substr() (获取子字符串)等。
  4. 操作符重载: string 类重载了多个操作符,使得字符串比较、连接和赋值更加直观。例如,你可以使用 + 操作符来连接两个字符串,或者使用 == 操作符来比较两个字符串是否相等
  5. 迭代器支持:像其他标准库容器一样, string 类也支持迭代器,使得你可以使用迭代器来遍历字符串中的字符
  6. 与 C 风格字符串的兼容性: string 类提供了与 C 风格字符串互操作的功能,例如,你可以使用 c_str() 方法来获取一个与 C 风格字符串兼容的、以 null 结尾的字符数组

下面是一个简单的 string 类的使用示例:

#include <iostream>
#include <string>int main() {std::string str = "Hello, world!";std::cout << str << std::endl; // 输出字符串str += " I am a C++ string."; // 字符串连接std::cout << str << std::endl;std::string substr = str.substr(7, 5); // 获取子字符串std::cout << "Substring: " << substr << std::endl;return 0;
}

在这个示例中,我们创建了一个 string 对象 str ,然后使用不同的方法对其进行操作。这展示了 string 类的灵活性和强大功能。

下面是一个表格,展示了 C++ 中 std::string 类的一些常用成员函数及其功能和参数:

这些函数是 std::string 类中常用的一部分,提供了强大且灵活的字符串操作能力。使用这些函数可以方便地处理和修改字符串数据。

相关文章:

C++——从C语言快速入门

目录 一、数组 1、声明数组 2、初始化数组 3、访问数组元素 4、示例 5、注意事项 6、数组小练习 计算器支持加减乘除 数组找最大值 二、指针 三、字符串 string 类型 一、数组 在 C 中&#xff0c;数组是一种存储固定大小的相同类型元素的序列。数组的所有元素都存…...

thinkpad T440p ubuntu-slam软件安装记录

安装问题 1.ubuntu20.04安装后提示"x86/cpu:VMX(outside TXT) disabled by BIOS" 这是虚拟化被禁止了&#xff0c;到BIOS里去把Virtualization选项打开即可。 2.ACPI Error:Needed type[Reference],found [Integer] 等错误 link这篇博客中提到该问题&#xff0c;…...

本地电脑访问windows server系统服务器 并传输文件

1、 mstsc 命令打开远程桌面连接。 2、填入登入的用户密码&#xff0c;在本地资源中设置需要共享的盘。登入成功后就可以在服务器与本地电脑互传文件了。...

kubernetes负载均衡---MetalLB

https://github.com/metallb/metallb 参考 &#xff1a; https://mp.weixin.qq.com/s/MBOWfcTjFMmgJFWw-FIk0Q 自建的Kubernetes集群&#xff0c;默认情况下是不支持负载均衡的。当需要提供服务的外部访问时&#xff0c;可使用 Ingress、NodePort等方式。他们都存在一些问题 …...

Python面试宝典:Python中与设计模式相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第二部分:Python高级特性:第二十二章:代码设计和设计模式:第二节:设计模式】 第二十二章:代码设计和设计模式第二节:设计模式创建型模式结构型模式行为型模式python中与设计模式相关的面试笔试题面试题1面试题…...

以sqlilabs靶场为例,讲解SQL注入攻击原理【18-24关】

【less-18】 打开时&#xff0c;获取了自己的IP地址。&#xff0c;通过分析源码知道&#xff0c;会将用户的user-agent作为参数记录到数据库中。 提交的是信息有user-Agent、IP、uname信息。 此时可以借助Burp Suite 工具&#xff0c;修改user_agent&#xff0c;实现sql注入。…...

【已有项目版】uniapp项目发版pda -- Android Studio

必备资料清单&#xff1a; 构建完成的app项目 在HBuilderX开发的uniapp项目 .keystore文件 文章目录 1. 安装Android Studio&#xff1a;https://developer.android.google.cn/studio?hlzh-cn2. 安装Android 离线SDK&#xff1a;https://nativesupport.dcloud.net.cn/AppDocs…...

三维重建,谁才是顶流?

3DGS技术是近年来计算机视觉领域最具突破性的研究成果之一。它不仅在学术界引起了广泛关注&#xff0c;成为计算机视觉、SLAM等领域的研究热点&#xff0c;而且每天都有大量基于Gaussian Splatting的新研究问世。此外&#xff0c;3DGS技术在商业应用方面也取得了显著进展&#…...

s32k314【入门新手篇】-开发环境安装【ds32开发平台】

软件包下载 登录nxp官网下载&#xff1a;https://www.nxp.com/ 然后输入关键字&#xff1a;S32 查看 下载安装包 以上三步请先注册好并登录你的个人账号 下载完之后如下&#xff1a; 软件安装 eb安装并激活【试用版】 激活 2 安装ds 弹出什么就安装什么就好了。 …...

DiffBIR论文阅读笔记

这篇是董超老师通讯作者的一篇盲图像修复的论文&#xff0c;目前好像没看到发表在哪个会议期刊&#xff0c;应该是还在投&#xff0c;这个是arxiv版本&#xff0c;代码倒是开源了。本文所指的BIR并不是一个single模型对任何未知图像degradation都能处理&#xff0c;而是用同一个…...

基于STM32的位置速度环PID控制伺服电机转动位置及程序说明

PID控制原理 PID控制原理是一种广泛应用于工业自动化和其他领域的控制算法。PID控制器的名字来源于其三个主要组成部分&#xff1a;比例&#xff08;Proportional&#xff09;、积分&#xff08;Integral&#xff09;和微分&#xff08;Derivative&#xff09;。PID控制器实现…...

操作失败——后端

控制台观察&#xff0c;页面发送的保存菜品的请求 返回的response显示&#xff1a; ---------- 我开始查看明明感觉都挺正常&#xff0c;没啥错误&#xff0c;就是查不出来。结果后面电脑关机重启后&#xff0c;隔一天看&#xff0c;就突然可以了。我觉着可能是浏览器的缓存没…...

基于SSM的“学校访客登记系统”的设计与实现(源码+数据库+文档)

基于SSM的“学校访客登记系统”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 平台架构图 系统首页 校园公告信息界面 留言板管理界面 家庭来…...

linux配置IP、子网掩码、网关

linux虚拟机配置IP、子网掩码、网关 本方法适用于 Ubuntu 18.04 之后的版本。 例1&#xff1a; 配置信息&#xff1a; IP:10.100.100.23 子网掩码:255.255.255.240 网关:10.100.100.56 1、打开网络配置文件 01-network-manager-all.yaml sudo vi /etc/netplan/01-network-…...

Java 垃圾回收

文章目录 1 Java 垃圾回收1.1 JVM1.2 Java 对象生命周期 2 如何判断一个对象可被回收2.1 引用计数算法2.2 可达性分析算法 3 垃圾回收过程3.1 总体过程3.2 为什么要进行世代垃圾回收&#xff1f;3.3 分代垃圾回收过程 在 C 和 C 中&#xff0c;许多对象要求程序员声明他们后为其…...

多客陪玩系统-开源陪玩系统平台源码-支持游戏线上陪玩家政线下预约等多场景应用支持H5+小程序+APP

多客陪玩系统-开源陪玩系统平台源码-支持游戏线上陪玩家政按摩线下预约等多场景应用支持H5小程序APP 软件架构 前端&#xff1a;Uniapp-vue2.0 后端&#xff1a;Thinkphp6 前后端分离 前端支持&#xff1a; H5小程序双端APP&#xff08;安卓苹果&#xff09; 安装教程 【商业…...

书生·浦语大模型全链路开源体系-笔记作业2

全部写成了shell脚本&#xff0c;可以一键执行。 笔记&#xff1a; 1. 环境安装(InternStudio开发机) # 1. 创建conda环境 studio-conda -o internlm-base -t demo # 2. 激活conda环境 conda activate demo # 3. 安装额外的依赖 pip install huggingface-hub0.17.3 pip inst…...

手把手教你发布你的第一个npm插件包

在开源的世界里&#xff0c;npm&#xff08;Node Package Manager&#xff09;不仅是JavaScript生态中不可或缺的一部分&#xff0c;也是全球最大的软件注册表&#xff0c;它使得分享和复用代码变得异常简单。如果你有一个很棒的想法或者实用的功能想要封装成一个npm包供他人使…...

Docker-compose 编排lnmp(dockerfile) 完成Wordpress

一、部署 Nginx 镜像 1. 建立工作目录 mkdir /opt/lnmp/nginx -pcd /opt/lnmp/nginx#上传 nginx 安装包 nginx-1.12.0.tar.gz#上传 wordpress 服务包 wordpress-4.9.4-zh_CN.tar.gz mkdir /opt/lnmp/nginx/htmltar zxvf wordpress-4.9.4-zh_CN.tar.gz -C /opt/lnmp/nginx/html…...

秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

文章目录 复习Z字形变换实现代码参考代码 两数之和复习代码 新作整数反转个人实现实现代码 参考做法字符串转换整数个人解法 分析总结 复习 Z字形变换 实现代码 这里使用了他的思想&#xff0c;但是没有用他的代码&#xff0c;虽然已经比上次简洁了&#xff0c;但是还是不够&…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...