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

NO.21十六届蓝桥杯备战|一维数组|范围for|memset|memcpy(C++)

数组是⼀组相同类型元素的集合

  • 数组中存放的是1个或者多个数据,但是数组元素个数不能为0
  • 数组中存放的多个数据,类型是相同的
    数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组

一维数组

⼀维数组是最常⻅的,通常⽤来存放⼀组数据,⼀维数组是⼀块连续的空间
![[Pasted image 20250228163202.png]]

数组创建
type arr_name[常量值];

存放在数组的值被称为数组的元素,数组在创建的时候需要指定数组的⼤⼩和数组的元素类型
• type 指定的是数组中存放数据的类型,可以是:char、short、int、float 等,也可以⾃
定义的类型
• arr_name 是数组的名字,这个名字可以⾃定义,根据实际情况,起的有意义就⾏。
[]中的常量值是⽤来指定数组的⼤⼩的,数组的⼤⼩是根据实际的需求指定就⾏。在算法竞赛中为了为了保证不越界访问,往往会多开辟⼀些空间。
• 可以使⽤ const int N = 100 的⽅式定义常量,来指定数组的⼤⼩。

数组的初始化

有时候,数组在创建的时候,我们需要给定⼀些初始值,这种就称为初始化

//完全初始化,数据会依次放⼊数组  
int arr[5] = {1,2,3,4,5};  
//不完全初始化  
int arr2[6] = {1};//第⼀个元素初始化为1,剩余的元素默认初始化为0  
//错误的初始化 - 初始化项太多  
int arr3[3] = {1, 2, 3, 4};
数组元素访问

数组是有下标的,下标是从0开始的,假设数组有n个元素,最后⼀个元素的下标是n-1 ,下标就相当于数组元素的编号

int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

![[Pasted image 20250228181254.png]]

数组的访问提供了⼀个操作符 [] ,这个操作符叫:下标引⽤操作符
有了下标访问操作符,我们就可以轻松的访问到数组的元素了,⽐如我们访问下标为7的元素,我们就可以使⽤ arr[7] ,想要访问下标是3的元素,就可以使⽤ arr[3]

数组元素的打印

想要访问整个数组的内容,只要我们产⽣数组所有元素的下标就可以了,那我们使⽤ for 循环产⽣所有的下标,接下来使⽤下标访问就⾏了

如果产⽣的下标超出了有效下标的范围,⽐如,使⽤负数作为下标,或者超出了下标
的最⼤值,再使⽤这个下标访问元素就会造成:越界访问。越界访问访问的时候,代码编译
时语法没报错,但是运⾏时⼀定会出问题的

数组和sizeof
  • sizeof(数组名) ,计算的是数组的总⼤⼩,单位是字节
  • sizeof(数组名)/sizeof(第⼀个元素) ,计算的是数组的元素个数
数组元素的打印
#include <iostream>  
using namespace std;  int main()  
{  int arr[10] = {1,2,3,4,5,6,7,8,9,10};  int i = 0;  for(i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)  {  cout << arr[i] << " ";  }  return 0;  
}

![[Pasted image 20250228181549.png]]

范围for

打印数组元素除了可以使⽤之前讲过的三种循环外,还有⼀个更⽅便的⽅式,使⽤范围 for 。范围for是在 C++11 这个标准中引⼊的,如果你使⽤的编译器默认不⽀持 C++11 ,可能需要配置才能使⽤

范围for语法
for ( 类型 变量名 : 数组名 )  语句 //多条语句需要加⼤括号
#include <iostream>  
using namespace std;  int main()  
{  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };  for (int e : arr)  {  cout << e << " ";  }  return 0;  
}

上⾯代码中的 for 就是 范围for ,代码的意思是将 arr 数组中的元素,依次放在 e 变量中,然后
打印 e ,直到遍历完整个数组的元素。这⾥的 e 是⼀个单独的变量,不是数组的元素,所以对 e 的修改,不会影响数组。
但是对于范围 for 要慎重使⽤!范围 for 是对数组中所有元素进⾏遍历的,但是实际在做题的过程中,可能只需要遍历数组中指定个数的元素,这样范围 for 就不合适了。

auto关键字

auto 的主要⽤途是让编译器⾃动推导出变量的类型的

#include <iostream>  
using namespace std;  int main()  
{auto a = 3.14;  auto b = 100;  auto c = 'x';  return 0;  
}

![[Pasted image 20250228182030.png]]

#include <iostream>  
using namespace std;  int main()  
{  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };  for (auto e : arr)//auto能够⾃动推导数组中每个元素的数据类型,在数组范围内遍历打印元素{  cout << e << " ";  }  return 0;  
}

范围 for 中 e 前⾯的类型可以可以是 auto 关键字,当不知道数组中放什么类型的时候,可以使⽤ auto 作为类型, auto 在范围 for 中很常⽤。如果明确的知道数组元素的数据类型,也可以将auto 换成对应的数据类型

memset设置数组内容
void * memset ( void * ptr, int value, size_t num );
  • ptr – 指针:指向了要设置的内存块的起始位置
  • value – 要设置的值
  • num – 设置的字节个数
    memset 是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容,需要头⽂件<cstring>
#include <iostream>  
#include <cstring>  
using namespace std;  int main ()  
{  char str[] = "hello world";  memset(str, 'x', 6);  cout << str << endl;  int arr[] = {1,2,3,4,5};  memset(arr, 0, sizeof(arr));//这⾥数组的⼤⼩也可以⾃⼰计算  for(auto i : arr)  {  cout << i << " ";}  cout << endl;  return 0;  
}

![[Pasted image 20250228184921.png]]

![[Pasted image 20250228184942.png]]

错误使⽤
#include <iostream>  
using namespace std; int main ()  
{  int arr[] = {1,2,3,4,5};  memset(arr, 1, 4 * sizeof(int));  for(auto e : arr)  {  cout << e << " ";  }  cout << endl;  return 0;  
}

![[Pasted image 20250228201247.png]]

当value设置为1或者其他⾮0的数字时,打印结果不符合预期
主要原因是 memset 函数是给每个字节设置 value 值,⽽⼀个整型元素占⽤4个字节,⼀个整型的每个字节都被设置为1,⼆进制就是: 00000001000000010000000100000001 ,转换成⼗进制就是: 16843009 ,因此结果是不符合预期的。

memcpy拷⻉数组内容

在使⽤数组的时候,有时候我们需要将数组a的内容给数组b
![[Pasted image 20250228201556.png]]

C++中有⼀个库函数 memcpy 可以做数组内容的拷⻉,当然 memcpy 其实是⽤来做内存块的拷⻉的,当然⽤来做数组内容的拷⻉也是没问题的

void * memcpy ( void * destination, const void * source, size_t num );
  • destination – ⽬标空间的起始地址
  • source – 源数据空间的起始地址
  • num – 拷⻉的数据的字节个数
#include <iostream>  
#include <cstring>  
using namespace std;  int main()  
{  int a[10] = {1,2,3,4,5,6,7,8,9,10};  int b[10] = {0};  memcpy(b, a, 10 * sizeof(int));  for(int e: b)  {  cout << e << " ";  }  return 0;  
}

当然如果拷⻉ double 类型的数组时,计算时应该使⽤ sizeof(double) ,要灵活变化

相关文章:

NO.21十六届蓝桥杯备战|一维数组|范围for|memset|memcpy(C++)

数组是⼀组相同类型元素的集合 数组中存放的是1个或者多个数据&#xff0c;但是数组元素个数不能为0数组中存放的多个数据&#xff0c;类型是相同的 数组分为⼀维数组和多维数组&#xff0c;多维数组⼀般⽐较多⻅的是⼆维数组 一维数组 ⼀维数组是最常⻅的&#xff0c;通常⽤…...

开源模型应用落地-DeepSeek-R1-Distill-Qwen-7B-Docker助力-模型部署 “光速” 指南

一、前言 在人工智能的浪潮里,大语言模型不断迭代更新,DeepSeek-R1-Distill-Qwen-7B 模型凭借出色的表现,吸引着无数开发者的目光。然而,想要将这个强大的模型顺利部署并投入使用,过程却并不轻松。传统的部署方式仿佛布满荆棘,从底层环境搭建到各种依赖项的适配,每一步都…...

unity TextMeshPro动态字体使用

TextMeshPro 显示文本的时候&#xff0c;依赖与文本贴图&#xff0c;这个贴图可以是静态的&#xff0c;也可以根据显示需求动态生成&#xff0c;动态的资源对内存消耗会高一些&#xff0c;所以我们一般将常用的3500汉字创建一个静态的字体库&#xff0c;然后在创建一个动态字体…...

C#使用技巧

文章目录 判断7天以内判断7天以内 Date date = new Date(); //获取当前时间Date s00 = (Date) pageData.get(...

爱普生可编程晶振 SG-8101CE 在智能家居领域展现出的优势

在智能家居的全场景应用中&#xff0c;设备间的协同效率、数据传输的稳定性以及系统运行的可靠性&#xff0c;成为衡量用户体验的核心标准。爱普生 SG-8101CE 可编程晶振以其卓越的性能&#xff0c;为智能门锁、传感器、中控系统等设备提供核心动力&#xff0c;助力厂商打造更可…...

第6篇:面向对象编程重构系统

一、OOP重构目标 数据封装:隐藏实现细节​接口抽象:规范操作入口资源自治:实现自管理生命周期扩展基础:预留多态支持接口二、完全面向对象实现(完整代码) #include <iostream> #include <Windows.h> #include <li...

杰发科技AC7801——滴答定时器获取时间戳

1. 滴答定时器 杰发科技7801内部有一个滴答定时器&#xff0c;该定时器是M0核自带的&#xff0c;因此可以直接用该定时器来获取时间戳。 同样&#xff0c;7803也可以使用该方式获取时间戳。 2. 滴答定时器原理 SysTick是一个24位的递减计数器&#xff0c;它从预设的重装载值…...

2021-05-27 C++找出矩阵数组中值最大的元素和它在数组中的位置

缘由各位大佬&#xff0c;这个应该怎么做_编程语言-CSDN问答 void 找出数组中值最大的元素和它在数组中的位置() {//缘由https://ask.csdn.net/questions/7436585?spm1005.2025.3001.5141int a[4][4], aa 0, aaa 0, d 0, x 0;while (aa < 4 && aaa < 4)std…...

k8s集群3主5从高可用架构(kubeadm方式安装k8s)

关键步骤说明 环境准备阶段 系统更新&#xff1a;所有节点执行yum/apt update确保软件包最新时间同步&#xff1a;通过ntpdate time.windows.com或部署NTP服务器网络规划&#xff1a;明确划分Service网段&#xff08;默认10.96.0.0/12&#xff09;和Pod网段&#xff08;如Flann…...

上位机知识篇---HTTPHTTPS等各种通信协议

文章目录 前言1. HTTP&#xff08;HyperText Transfer Protocol&#xff09;功能传输超文本无状态协议支持多种方法 特点明文传输基于TCP简单灵活 使用场景示例请求响应 2. HTTPS&#xff08;HTTP Secure&#xff09;功能加密传输身份验证特点基于SSL/TLS默认端口需要证书 使用…...

Android实现漂亮的波纹动画

Android实现漂亮的波纹动画 本文章讲述如何使用二维画布canvas和camera、矩阵实现二、三维波纹动画效果&#xff08;波纹大小变化、画笔透明度变化、画笔粗细变化&#xff09; 一、UI界面 界面主要分为三部分 第一部分&#xff1a;输入框&#xff0c;根据输入x轴、Y轴、Z轴倾…...

大白话React Hooks(如 useState、useEffect)的使用方法与原理

啥是 React Hooks 在 React 里&#xff0c;以前我们写组件主要用类&#xff08;class&#xff09;的方式&#xff0c;写起来有点复杂&#xff0c;尤其是处理状态和副作用的时候。React Hooks 就是 React 16.8 之后推出的新特性&#xff0c;它能让我们不用写类&#xff0c;直接…...

【无标题】ABP更换MySql数据库

原因&#xff1a;ABP默认使用的数据库是sqlServer&#xff0c;本地没有安装sqlServer&#xff0c;安装的是mysql&#xff0c;需要更换数据库 ABP版本&#xff1a;9.0 此处以官网TodoApp项目为例 打开EntityFrameworkCore程序集&#xff0c;可以看到默认使用的是sqlServer&…...

掌握Git:从入门到精通的完整指南

Git是什么&#xff1f; Git是一个分布式版本控制系统&#xff0c;最初由Linus Torvalds在2005年为管理Linux内核开发而创建 它的主要功能是跟踪文件的更改&#xff0c;协调多个开发者之间的工作&#xff0c;并帮助团队高效地管理项目代码。Git不仅适用于大型开源项目&#xf…...

Windows上使用go-ios实现iOS17自动化

前言 在Windows上运行iOS的自动化&#xff0c;tidevice对于iOS17以上并不支持&#xff0c;原因是iOS 17 引入新通信协议 ‌RemoteXPCQUIC‌&#xff0c;改变了 XCUITest 的启动方式。 一、go-ios的安装 1、安装命令&#xff1a;npm i go-ios 2、安装完成后输入命令which io…...

服务器硬防的优势有哪些?

服务器硬防也可以称为硬件防火墙&#xff0c;是一种专门用来保护网络不会受到未经授权访问所设计的设备&#xff0c;硬件防火墙是一个独立的设备&#xff0c;同时也是集成在路由器或者是其它网络设备中的一部分&#xff0c;下面&#xff0c;小编就来为大家介绍一下服务器硬防的…...

Grok3使用体验与模型版本对比分析

文章目录 Grok的功能DeepSearch思考功能绘画功能Grok 3的独特功能 Grok 3的版本和特点与其他AI模型的比较 最新新闻&#xff1a;Grok3被誉为“地球上最聪明的AI” 最近&#xff0c;xAI公司正式发布了Grok3&#xff0c;并宣称其在多项基准测试中展现了惊艳的表现。据官方消息&am…...

JavaScript——前端基础3

目录 JavaScript简介 优点 可做的事情 运行 第一个JavaScript程序 搭建开发环境 安装的软件 操作 在浏览器中使用JavaScript文件 分离JS 使用node运行JS文件 语法 变量与常量 原生数据类型 模板字符串 字符串的内置方法 数组 对象 对象数组和JSON if条件语…...

零基础学习机器学习分类模型

下面将带你通过一个简单的机器学习项目&#xff0c;使用Python实现一个常见的分类问题。我们将使用著名的Iris数据集&#xff0c;来构建一个机器学习模型&#xff0c;进行花卉品种的分类。整个过程会包含&#xff1a; 原理介绍&#xff1a;机器学习的基本概念。数据加载和预处…...

Spring 源码硬核解析系列专题(十):Spring Data JPA 的 ORM 源码解析

在前几期中,我们从 Spring 核心到 Spring Boot、Spring Cloud、Spring Security 和 Spring Batch,逐步揭示了 Spring 生态的多样性。在企业级开发中,数据访问是不可或缺的部分,而 Spring Data JPA 通过简化 JPA(Java Persistence API)操作,成为主流的 ORM 框架。本篇将深…...

视频推拉流EasyDSS点播平台云端录像播放异常问题的排查与解决

EasyDSS视频直播点播平台是一个功能全面的系统&#xff0c;提供视频转码、点播、直播、视频推拉流以及H.265视频播放等一站式服务。该平台与RTMP高清摄像头配合使用&#xff0c;能够接收无人机设备的实时视频流&#xff0c;实现无人机视频推流直播和巡检等多种应用。 最近&…...

Oracle23版本 创建用户 报 00959和65096错误解决办法

00959错误解决办法&#xff0c;用户名必须已 c##或者C##开头 65096错误解决办法&#xff0c;创建用户名时去掉DEFAULT TABLESPACE smallrainTablespace这个属性 附上oracle 23版本创建表空间和用户语句&#xff1b; sqlplus sys as sysdba CREATE TABLESPACE smallrainOrac…...

Vue3 中 defineOptions 学习指南

在 Vue 3.3 及之后的版本中&#xff0c;defineOptions 是一个重要的宏&#xff08;macro&#xff09;&#xff0c;主要用于在 <script setup> 语法糖中声明组件的选项&#xff08;Options&#xff09;&#xff0c;解决了传统 <script setup> 无法直接定义组件选项的…...

简单说一下什么是RPC

部分内容来源&#xff1a;JavaGuide RPC是什么 RPC是远程调用 RPC的原理 RPC的五个部分 为了能够帮助小伙伴们理解 RPC 原理&#xff0c;我们可以将整个 RPC 的核心功能看作是下面 5 个部分实现的&#xff1a; 客户端&#xff08;服务消费端&#xff09;&#xff1a;调用…...

Pany-v2:LFI漏洞探测与敏感文件(私钥窃取/其他)自动探测工具

地址:https://github.com/MartinxMax/pany 关于Pany-v2 Pany-v2 是一款 LFI&#xff08;本地文件包含&#xff09;漏洞探测工具&#xff0c;具备自动识别敏感文件的能力。它能够利用 LFI 漏洞检测并提取 id_rsa 私钥、系统密码文件以及其他可能导致安全风险的敏感信息。该工具…...

北京大学DeepSeek与AIGC应用(PDF无套路下载)

近年来&#xff0c;人工智能技术飞速发展&#xff0c;尤其是大模型和生成式AI&#xff08;AIGC&#xff09;的突破&#xff0c;正在重塑各行各业的生产方式与创新路径。 北京大学联合DeepSeek团队推出的内部研讨教程《DeepSeek与AIGC应用》&#xff0c;以通俗易懂的方式系统解…...

AWS SDK for Java 1.x 403问题解决方法和原因

问题表现 使用AWS SDK for Java 1.x访问S3&#xff0c;已经确认文件存在&#xff0c;且具有权限&#xff0c;仍然出现403 Forbidden应答。 解决方法 升级到AWS SDK for Java 2.x。 问题原因 AWS签名机制严格依赖请求的精确路径格式&#xff0c;任何URI的差异&#xff08;如…...

Vue进阶之Vue2源码解析

Vue2源码解析 源码解析目录解析package.json入口查找入口文件确定vue入口this.\_init_ 方法$mount 挂载方法Vue.prototype._renderVue.prototype._updateVue.prototype._patch vue2 vue3 源码解析 目录解析 vue2.6之后的版本都做的是兼容Vue3的内容&#xff0c;2.6版本前的内…...

unity lua属性绑定刷新

我们现在有一个 角色属性类叫heroModel,内容如下,当heroModel中的等级发生变化的时候&#xff0c;我们需要刷新界面显示等级信息&#xff0c;通常我们是在收到等级升级成功的协议的时候&#xff0c;发送一个事件&#xff0c;UI界面接受到这个事件的时候&#xff0c;刷新一下等级…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_t

ngx_conf_t 定义在src/core/ngx_core.h typedef struct ngx_conf_s ngx_conf_t;ngx_conf_s 定义在 src/core/ngx_conf_file.h struct ngx_conf_s {char *name;ngx_array_t *args;ngx_cycle_t *cycle;ngx_pool_t *po…...