C++ ——数组介绍和实例

文章目录

      • **定义数组**
      • **初始化数组**
      • **访问数组元素**
      • **一维数组与多维数组**
      • **数组与指针**
      • **数组的局限性**
      • **现代C++中的替代方案**
    • 以下是一个C++程序实例,演示了如何定义、初始化、访问一维数组以及使用循环遍历数组:

C++ ——数组
C++ 中的“数组”是一种基本的数据结构,它代表了一段连续的内存区域,用于存储固定数量的相同类型的数据元素。下面对C++中的数组进行全面介绍:

定义数组

定义数组的基本语法如下:

数据类型 名称[大小];

其中:

  • 数据类型:指明数组中每个元素的类型,可以是任何C++内置类型(如 intfloatchar)或用户自定义类型(如结构体、类)。
  • 名称:为数组赋予一个唯一的标识符,用于在程序中引用该数组。
  • 大小:是一个非负整数常量表达式,表示数组中元素的数目。注意,数组大小在编译时就必须确定,不能动态改变。

例如,定义一个包含5个整数的数组:

int numbers[5];

这表示创建了一个名为 numbers 的数组,能够存储5个 int 类型的值。

初始化数组

数组可以在定义时直接初始化,通过在大括号 {} 内列出初始值,按照从左到右的顺序依次赋给数组元素。如果初始值数量小于数组大小,剩余元素将被默认初始化(通常是整型为0,浮点型为0.0,对象类型为构造函数的默认值)。例如:

int scores[5] = {100, 95, 98, 85, 80};

或者,如果初始值数量与数组大小相同,可以省略数组大小:

int scores[] = {100, 95, 98, 85, 80}; // 编译器自动推断出数组大小为5

也可以使用花括号列表的初始化形式来初始化所有元素为同一值:

int emptyArray[10] = {0}; // 所有元素都初始化为0

访问数组元素

数组元素通过索引来访问,索引是从0开始的整数。访问数组元素的语法是:

数组名[索引]

合法的索引范围是 0数组大小 - 1。例如,访问 numbers 数组的第一个和最后一个元素:

int firstElement = numbers[0]; // 获取第一个元素
int lastElement = numbers[4]; // 获取最后一个元素

访问越界元素会导致未定义行为,这是C++编程中的常见错误源。

一维数组与多维数组

C++ 支持一维数组(线性数组)、二维数组(表格状数组)乃至更高维度的数组。二维数组可以看作是数组的数组,其定义语法如下:

数据类型 名称[行数][列数];

例如,定义一个3行4列的整数矩阵:

int matrix[3][4];

访问二维数组元素时需要提供两个索引,分别对应行和列:

matrix[row][column];

数组与指针

数组名被视为指向其首元素的常量指针。因此,可以使用指针运算来遍历数组:

for (int i = 0; i < 5; ++i) {cout << numbers[i] << ' ';
}// 或者使用指针
int *p = numbers;
for (int i = 0; i < 5; ++i, ++p) {cout << *p << ' ';
}

数组的局限性

尽管数组在简单数据存储和快速随机访问上很有用,但它们有一些固有的局限性:

  • 固定大小:一旦数组创建,其大小就不能改变。如果需要动态调整容量,通常需要使用 std::vector 这样的容器类。
  • 内存连续性要求:对于大数据集或复杂数据结构,连续内存分配可能变得困难,且可能导致内存碎片。
  • 没有内置边界检查:访问越界不会引发运行时错误,而是导致未定义行为,这在调试时可能难以察觉。

现代C++中的替代方案

在现代C++编程中,虽然数组仍然是基础数据结构,但为了克服其局限性并利用标准库提供的便利,通常推荐使用标准模板库(STL)中的容器,如 std::vectorstd::arraystd::deque。这些容器提供了动态大小调整、边界检查、迭代器支持、算法集成等更高级的功能,增强了代码的健壮性和可维护性。

总结来说,C++ 中的数组是一种基础而高效的存储多个同类型数据的方式,理解其定义、初始化、访问方法以及局限性对于编写和调试C++程序至关重要。在实际项目中,应根据具体需求权衡使用原生数组还是更高级的容器类。

以下是一个C++程序实例,演示了如何定义、初始化、访问一维数组以及使用循环遍历数组:

#include <iostream>int main() {// 定义并初始化一个包含5个整数的数组int grades[5] = {85, 92, 76, 9¾, 88};// 访问并输出数组中的特定元素std::cout << "First grade: " << grades[0] << std::endl;std::cout << "Last grade: " << grades[4] << std::endl;// 使用循环遍历并输出整个数组std::cout << "All grades:" << std::endl;for (size_t i = 0; i < 5; ++i) {std::cout << "Grade " << (i + 1) << ": " << grades[i] << std::endl;}return 0;
}

在这个示例中:

  1. 首先包含了 <iostream> 头文件,以便使用 std::cout 进行输出。

  2. 定义了一个名为 grades 的一维数组,类型为 int,大小为5。同时使用初始化列表 {85, 92, 76, 9¾, 88} 对数组进行了初始化,每个值对应数组的一个元素。

  3. 使用 grades[0]grades[4] 分别访问并输出数组的第一个(索引为0)和最后一个(索引为4)元素。

  4. 使用 for 循环遍历数组。循环变量 i 从0开始,每次递增1,直到达到数组大小(5)。在每次循环中,通过 grades[i] 访问当前索引处的元素,并将其值输出。同时输出了当前元素对应的索引位置(i + 1),使得输出结果更易读。

编译并运行上述程序,将得到类似以下的输出:

First grade: 85
Last grade: 88
All grades:
Grade 1: 85
Grade 2: 92
Grade 3: 76
Grade 4: 9¾
Grade 5: 88

这个实例展示了C++中数组的基本操作,包括定义、初始化、访问以及遍历。在实际编程中,可以根据需要对数组进行更复杂的操作,如排序、查找、统计等。

python推荐学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2项目设置浏览器标题title及图标logo

工作中肯定会遇到要修改网页的标题title及图标logo 一、固定设置标题方案 方法一&#xff1a;在vue.config.js文件&#xff0c;添加如下代码&#xff1a; chainWebpack: config > {// 配置网页标题config.plugin(html).tap((args) > {args[0].title 标题return args})…

[TS面试]keyof和typeof关键字作用?

keyof和typeof关键字作用? keyof 索引类型查询操作符, 获取索引类型属性名, 构成联合类型 typeof 获取一个变量或者对象的类型 let str:string ‘hello’ // typeof str >:string keyof typeof 获取 联合类型的key enum A{A, B, C }type unionType keyof typeof A; /…

数字身份的革命:解锁 Web3 的身份验证技术

引言 随着数字化时代的到来&#xff0c;个人身份认证成为了日常生活和商业活动中不可或缺的一部分。传统的身份验证方式存在着安全性低、易伪造、不便利等问题&#xff0c;因此&#xff0c;人们迫切需要一种更安全、更便捷的身份验证技术。在这样的背景下&#xff0c;Web3的身…

macos下 jupyter服务安装和vscode链接密码设置 .ipynb文件

最近收到了一些后缀为.ipynb的文件&#xff0c; 这个文件就是使用jupyter编辑的&#xff0c;于是就需要安装一个jupyter服务&#xff0c; 对于最新版本的jupyter 网上很多的资料都已经过期了&#xff0c;这里以最新版本的jupyter为例。 jupyter lab安装 jupyter 这个工具包含…

微软正在改进其AI驱动的Copilot在Microsoft Teams中的工作方式,为会议聊天、总结等引入了新的召唤助手方式

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

CUDA安装 Windows版

目录 一、说明 二、安装工具下载 三、CUDA安装 四、cuDNN配置 五、验证安装是否成功 一、说明 windows10 版本安装 CUDA &#xff0c;首先需要下载两个安装包 CUDA toolkitcuDNN 官方教程 CUDA&#xff1a;https://docs.nvidia.com/cuda/cuda-installation-guide-micro…

校园app开发流程-uniapp开发-支持APP小程序H5-源码交付-跑腿-二手市场-交友论坛等功能,学校自由选择!

随着科技的不断发展&#xff0c;智慧校园系统和跑腿外卖小程序已经成为当今社会的热门话题。作为未来的重要趋势之一&#xff0c;科技在教育领域中的应用越来越广泛。本文将探讨智慧校园系统和跑腿外卖小程序的开发过程&#xff0c;并阐述如何利用科技“育”见未来 一、智慧校…

接口自动化之 + Jenkins + Allure报告生成 + 企微消息通知推送

接口自动化之 Jenkins Allure报告生成 企微消息通知推送 在jenkins上部署好项目&#xff0c;构建成功后&#xff0c;希望可以把生成的报告&#xff0c;以及结果统计发送至企微。 效果图&#xff1a; 实现如下。 1、生成allure报告 a. 首先在Jenkins插件管理中&#x…

LVS负载均衡-DR模式配置

LVS&#xff1a;Linux virtual server ,即Linux虚拟服务器 LVS自身是一个负载均衡器&#xff08;Director&#xff09;&#xff0c;不直接处理请求&#xff0c;而是将请求转发至位于它后端的真实服务器real server上。 LVS是四层&#xff08;传输层 tcp/udp&#xff09;负载均衡…

11.Notepad++

文章目录 一、下载和安装设置练习 以前在记事本上写的代码看上去有点累&#xff0c;因为所有的单词看上去都是黑色的&#xff0c;并且当代码出现问题后&#xff0c;它提示第三行&#xff0c;我们还需要一行一行去数。这些问题都可以由一个高级记事本&#xff1a; Notepad 来解…

Windows直接运行python程序

Windows直接运行python程序 一、新建bat脚本二、新建vbs脚本 一、新建bat脚本 新建bat批处理脚本&#xff0c;写入以下内容 echo off call conda activate pytorch python app.pyecho off&#xff1a;在此语句后所有运行的命令都不显示命令行本身&#xff0c;但是本身的指令是…

第二篇:3.1 广告印象(AD Impression) - IAB与MRC及《增强现实广告效果测量指南1.0》

--- 我为什么要翻译美国IAB科技公司系列标准 翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效果测量定义和其他矩阵之- 3.1 广告印象&#xff08;AD Impression&#xff09;第三篇广告效果测量定义和其他矩阵之- 3.2 可见度 …

前端埋点全解及埋点SDK实现方式

一、什么是埋点 所谓“埋点”&#xff0c;是数据采集领域&#xff08;尤其是用户行为数据采集领域&#xff09;的术语&#xff0c;指的是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。比如用户某个icon点击次数、观看某个视频的时长等等。 埋点…

什么是物联网监控平台?部署物联网平台有什么作用?

随着物联网技术的飞速发展&#xff0c;越来越多的企业开始关注并投入到这一领域。物联网监控平台作为连接物理世界与数字世界的桥梁&#xff0c;正逐渐成为企业数字化转型的关键组件。今天&#xff0c;我们将深入探讨物联网监控平台的定义、部署物联网平台的作用&#xff0c;以…

linux环境gitlab迁移到新服务器

目录 备份项目备份gitlab配置阿里云磁盘格式化准备 最近服务器中了挖矿病毒&#xff0c;清理几次&#xff0c;都没有搞定&#xff0c;只能重新安装gitlab 备份项目 先把项目备份到本地 git pull git remote prune origin确保本地代码是最新的并且拥有所有的分支 git remote …

蓝桥杯-网络安全比赛(2)基础学习-正则表达式匹配电话号码、HTTP网址、IP地址、密码校验

正则表达式&#xff08;Regular Expression&#xff09;&#xff1a;定义&#xff1a;一种强大的文本处理工具&#xff0c;用于描述、匹配和查找字符串中的特定模式。应用&#xff1a;密码验证、文本搜索和替换、数据清洗等。特点&#xff1a;通过特定的元字符和规则来构建复杂…

逆向案例9--小鹅通视频m3u8内容解密--含简单webpack

视频网址&#xff1a;https://app4nseessp8638.h5.xiaoeknow.com/v2/course/alive/l_65b9e8dfe4b064a83b90e102?type2&app_idapp4nseessp8638&channel_id&res_type4&pro_id&res_idl_65b9e8dfe4b064a83b90e102 按照惯例&#xff0c;刷新网站&#xff0c;搜…

23种设计模式之创建型模式 - 单例模式

文章目录 一、单例模式1.1单例模式定义1.2 单例模式的特点 二、实现单例模式的方式2.1 饿汉式2.2 懒汉式2.3 双重检查锁&#xff1a;2.4 静态内部类2.5 枚举实现&#xff08;防止反射攻击&#xff09;&#xff1a; 一、单例模式 1.1单例模式定义 单例模式确保系统中某个类只有…

蓝桥杯刷题之路径之谜

题目来源 路径之谜 不愧是国赛的题目 题意 题目中会给你两个数组&#xff0c;我这里是分别用row和col来表示 每走一步&#xff0c;往左边和上边射一箭&#xff0c;走到终点的时候row数组和col数组中的值必须全部等于0这个注意哈&#xff0c;看题目看了半天&#xff0c;因为…

libVLC 视频抓图

Windows操作系统提供了多种便捷的截图方式&#xff0c;常见的有以下几种&#xff1a; 全屏截图&#xff1a;通过按下PrtSc键&#xff08;Print Screen&#xff09;&#xff0c;可以截取整个屏幕的内容。截取的图像会保存在剪贴板中&#xff0c;可以通过CtrlV粘贴到图片编辑工具…