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

新乡网站建设设计/免费域名 网站

新乡网站建设设计,免费域名 网站,学校网站怎么做的好,做网站备案什么意思数组是具有一定顺序关系的若干对象的集合体,组成数组的对象称为该数组的元素。 数组元素用数组名与带方括号的下标表示,同一数组的各个元素具有相同的类型。数组可以由除void型以外的任何一种类型构成,构成数组的类型和数组之间的关系&#x…

数组是具有一定顺序关系的若干对象的集合体,组成数组的对象称为该数组的元素。 数组元素用数组名与带方括号的下标表示,同一数组的各个元素具有相同的类型。数组可以由除void型以外的任何一种类型构成,构成数组的类型和数组之间的关系,可以类比为数学上数与向量或矩阵的关系。

每个元素有n个下标的数组称为n维数组。如果用array来命名一个数组,且其下标为从0到N的整数,则数组各元素为array[0],array[1],…,array[N]。这样一个数组可以顺序存储N+1个数据,因此N+1就是数组array的大小,数组的下标下界为0,数组的下标上界为N。

1.数组的声明与使用

(1)数组的声明

数组属于自定义数据类型,因此在使用之前首先要进行类型声明。声明一个数组类型,应该包括以下几个方面:

①确定数组的名称
②确定数组元素的类型
③确定数组的结构(包括数组维数,每一维的大小等)

数组类型声明的一般形式为:

数据类型 标识符[常量表达式1][常量表达式2]...;

数组中元素的类型是由“数据类型”给出,这个数据类型,可以是整型、浮点型等基本类型,也可以是结构体、类等用户自定义类型。数组的名称由“标识符”指定。

“常量表达式1”、“常量表达式2”、…称为数组的界,必须是在编译时就可求出的常量表达式,其值必须为正整数。数组的下标用来限定数组的元素个数、排列次序和每一个元素在数组中的位置。一个数组可以有多个下标,有n个下标的数组称为n维数组,数组元素的下标个数称为数组的维数。声明数组时,每一个下标表达式表示该维的下标个数(注意:不是下标上界)。数组元素个数是各下标表达式的乘积。例如:

int b[10];

表示b为int型数组,有10个元素:b[0]~b[9],可以用于存放10个元素的整数序列。

int a[5][3];

表示a为int型二维数组,其中第一维有5个下标(0~4),第二维有3个下标(0~2),数组元素的个数为15,可以用于存放5行3列的整型数据表格。值得注意的是数组下标的起始值为0。对于上面声明的数组a,第一个元素是a[0][0],最后一个元素是a[4][2]。也就是说每一维的下标都是从0开始。

(2)数组的使用

使用数组时,只能分别对数组的各个元素进行操作。数组的元素是由下标来区分的。对于一个已经声明过的数组,其元素的使用形式为:

数组名[下标表达式1][下标表达式2]...

其中下标表达式个数取决于数组的维数,N维数组就有N个下标表达式。

数组中的每一个元素都相当于一个相应类型的变量,凡是允许使用该类型变量的地方,都可以使用数组元素。可以像使用一个整型变量一样使用整型数组的每一个元素。同样,每一个类类型的数组也可以和一个该类的普通对象一样使用。在使用过程中注意以下两点:

(1)数组元素的下标表达式可以是任意合法的算术表达式,其结果必须为整数。
(2)数组元素的下标值不得超过声明时所确定的上下界,否则运算时数组越界错误。

【例】数组的声明与使用

#include<iostream>
using namespace std;int main()
{int a[10], b[10];for (int i = 0; i < 10; i++){a[i] = i * 2 - 1;b[10 - i - 1] = a[i];}for (int i = 0; i < 10; i++){cout << "a[" << i << "]=" << a[i] << endl;cout << "b[" << i << "]=" << b[i] << endl;}return 0;
}

运行结果:
在这里插入图片描述
结果分析:
程序中,定义了两个有10个元素的一维数组a和b,使用for循环对它们赋值,在引用b元素时采用了算术表达式作为下标。程序运行之后将-1,1,3,…,17分别赋给数组元素a[0],a[1],…,a[9],数组b中元素的值刚好是数组a中的逆序排列。

如果把两个循环语句for(int i=0;i<10;i++)改写为for(int i=1;i<=10;i++),在编译和连接过程中都不会出错,但最后运行时不仅不会得到正确结果,而且有可能产生意想不到的错误,这就是一个典型的数组越界错误。如下:

#include<iostream>
using namespace std;int main()
{int a[10], b[10];for (int i = 1; i <= 10; i++){a[i] =  i * 2 - 1; ;b[10 - i - 1] = a[i];}for (int i = 1; i <= 10; i++){cout << "a[" << i << "]=" << a[i] << endl;cout << "b[" << i << "]=" << b[i] << endl;}return 0;
}

运行结果:
在这里插入图片描述

2.数组的存储与初始化

(1)数组的存储

**数组元素在内存中是顺序、连续存储的。**数组元素在内存中占据一组连续的存储单位,逻辑上相邻的元素在物理地址上也是相邻的。一维数组是简单地按照下标的顺序连续存储的。多维数组的元素也是顺序、连续存储的,其存储顺序的约定非常重要。

元素的存储顺序问题关系到对数组做整体处理时,以什么样的顺序对数组元素进行操作。C++中很多操作都与数组元素的存储顺序相关,如数组初始化、函数间的数据传递等。

①一个一维数组可以看作是数学上的一个列向量,各元素是按下标从小到大的顺序连续存放在计算机内存单元中。例如,数组声明语句:

int arr[5];

声明了一个有5个元素的一维int型数组,可以看作是列向量[arr[0],arr[1],arr[2],arr[3],arr[4]],元素在内存中的存放顺序如下图所示:
在这里插入图片描述

②一个二维数组可以看作数学中的一个矩阵,第一个下标称为行标,第二个下标称为列标。例如,数组声明语句:

int m[2][3];

声明了一个数组,相当于一个2行3列的矩阵:
在这里插入图片描述
但在C++中,数组元素每一维的下标都是从0开始的,因此在程序中,矩阵M就被表示为:
在这里插入图片描述
其中,元素m[1][0],行标为1,列标为0,表示矩阵第2行第1个元素。二维数组在内存中是按行存放的,即先放第1行,再放第2行…每行中的元素是按列下标从小到大的顺序存放,这样的存储方式也称为优先存储。二维数组m在内存中的存放顺序如下图所示:
在这里插入图片描述
【注意】
C++中二维数组被当作一维数组的数组。例如int m[2][3]所定义的m,可以看作是这样一个数组,它的大小是2,每一个元素都是一个大小为3、类型为int的数组。由于数组的每个元素都要存放在连续空间中,因此二维数组自然会按行优先的顺序存储。

③多维数组也是采取类似的方式顺序存放。

(2)数组的初始化

数组的初始化就是在声明数组时给部分或全部元素赋初值。对于基本类型的数组,初始化过程就是给数组元素赋值;对于对象数组,每个元素都是某个类的一个对象,初始化就是调用该对象的构造函数。

声明数组时给出数组元素的初值,例如:

#include<iostream>
using namespace std;int main()
{int a[10] = { 1,2,3,4,5,6,7,8,9,10 };for (int i = 0; i < 10; i++){cout << "a[" << i << "]=" << a[i] << endl;}return 0;
}

运行结果:
在这里插入图片描述
表示声明了一个具有10个元素的int型数组,数组元素a[0],a[1],…,a[10]的值分别为1,2,3,4,5,6,7,8,9,10。声明数组时如果列出全部元素的初值,可以不用说明数组元素的个数,下面语句和int a[10] = { 1,2,3,4,5,6,7,8,9,10 };语句完全等价:

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

当然,也可以只对数组元素中的部分元素进行初始化,比如声明一个有5个元素的浮点型数组,给前3个元素分别赋值1.0,2.0,3.0,可以写为:

int main()
{float fa[5] = { 1.0,2.0,3.0 };int a[10] = { 1,2,3,4,5,6,7,8,9,10 };for (int i = 0; i < 5; i++){cout << "a[" << i << "]=" << fa[i] << endl;}return 0;
}

运行结果:
在这里插入图片描述
这时数组元素的个数必须明确指出,对于后面没有赋值的两个元素,也不用做任何说明。初始化只能针对所有元素或者从起始地址开始的前若干元素,而不能间隔赋初值。

【注意】
当指定的初值个数小于数组大小时,剩下的数组元素会被赋予0值。若定义数组时没有指定任何一个元素的初值,对于静态生存期的数组,每个元素仍然会被赋值为0;但对于动态生存期的数组,每个元素的初值都是不确定的。例如:
①静态生存期的数组

#include<iostream>
using namespace std;int main()
{static int a[10]for (int i = 0; i < 10; i++){cout << "a[" << i << "]=" << a[i]<<" ";}return 0;
}

运行结果:
在这里插入图片描述
②动态生存期的数组

#include<iostream>
using namespace std;int main()
{int a[10];for (int i = 0; i < 10; i++){cout << "a[" << i << "]=" << a[i] << ",";}cout << endl;return 0;
}

运行结果:
在这里插入图片描述
多维数组的初始化也遵守同样的规则。此外,如果给出全部元素的初值,第一维的下标个数可以不用显式说明,例如:

int a[2][3]={1,0,0,0,1,0};

等价于:

int a[][3]={1,0,0,0,1,0};

多维数组可以按第一维的下标进行分组,使用花括号将每一组的数据括起来。对于二维数组,可以分行用花括号括起来。下面的写法与上面的语句完全等效:

int a[2][3]={{1,0,0},{0,1,0}};

采用括号分组写法,容易识别,易于理解。

此外,数组也可以被声明为常量,例如:

const float fa[5]={1.0,2.0,3.0};

它表明fa数组中每个元素都被当作常量对待,也就是说它们的值在初始化后皆不可以改变。声明为常量的数组,必须给定初值。

相关文章:

C++ 数组

数组是具有一定顺序关系的若干对象的集合体&#xff0c;组成数组的对象称为该数组的元素。 数组元素用数组名与带方括号的下标表示&#xff0c;同一数组的各个元素具有相同的类型。数组可以由除void型以外的任何一种类型构成&#xff0c;构成数组的类型和数组之间的关系&#x…...

Android LinearLayout dynamic add child ImageView,Glide load,kotlin

Android LinearLayout dynamic add child ImageView&#xff0c;Glide load&#xff0c;kotlin images.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"andro…...

HTML 是什么?它的全称是什么?

聚沙成塔每天进步一点点 专栏简介HTML是什么&#xff1f;HTML的全称是什么&#xff1f;写在最后 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对We…...

ATF(TF-A)安全通告

目录计划如下&#xff0c;相关内容补充中&#xff0c;待完成后进行超链接&#xff0c;敬请期待&#xff0c;欢迎关注 1、Advisory TFV-1 (CVE-2016-10319) 2、Advisory TFV-2 (CVE-2017-7564) 3、Advisory TFV-3 (CVE-2017-7563) 4、Advisory TFV-4 (CVE-2017-9607) 5、Adviso…...

LVS—DR集群的搭建

目录 lvs-dr模式工作原理&#xff1a; 搭建结构&#xff1a; 1、RS&#xff1a; 1&#xff09;两台RS准备好httpd环境和测试文件 2&#xff09;添加虚拟IP&#xff08;vip&#xff09;、添加访问本地vip的静态路由 并抑制ARP 2、DS&#xff1a; 1&#xff09;安装ipvasadm…...

如何理解容量测试?如何做容量测试?

1、如何理解容量测试&#xff1f; 容量测试&#xff0c;是性能测试里的一部分&#xff0c;它的目的是测量系统的最大容量&#xff0c;为系统扩容、性能优化提供参考&#xff0c;节省成本投入&#xff0c;提高资源利用率。就是运用各种方法和工具在这种复杂的情况下去不断验证容…...

文件上传漏洞(webshell)

一、防护 1、防护 1、判断文件后缀&#xff0c;为图片的话才让上传成功。 2、解析文件内容&#xff08;文件幻数&#xff09;判断文件头和文件尾部是否一致 幻数 常见的 3、隐藏按钮&#xff08;带上code唯一值&#xff09; 4、二次渲染&#xff08;类似拿着你的图片&#xff…...

.net几行代码音乐API各排行榜 热搜 入库

对比了几家大厂的音乐API的接口 这家相对规范些 现在开始从零开始 net6敏捷开发对接 入库吧 关键技术工具和思维 1 json 生成类 2 分析类 规划表设计3 sqlsuger codefirst 生成表 4 封装get post 连接5 类映射automapper6 sqlsuger 插入数据 1 json 生成类 宇宙 第 一的…...

使用gpt对对话数据进行扩增,对话数据扩增,数据增强

我们知道一个问题可以使用很多方式问&#xff0c;但都可以使用完全一样的回答&#xff0c;基于这个思路&#xff0c;我们可以很快的扩增我们的数据集。思路就是使用chatgpt或者gpt4生成类似问题&#xff0c;如下&#xff1a; 然后我们可以工程化这个过程&#xff0c;从而快速扩…...

算法练习工程1.2

题目要求&#xff1a; * 问题标题&#xff1a;删除有序数组中的重复项&#xff1a; * 题意说明&#xff1a; * 给你一个 升序排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。 * …...

数字IC流片经历有多重要?怎样才能有流片机会?

都说拥有流片经验可以显示你在实际项目中的实践能力和对整个设计流程的了解程度&#xff0c;流片经历的重要性不言而喻。 什么是芯片流片 像流水线一样通过一系列工艺步骤制造芯片&#xff0c;这就是流片。在芯片制造过程中一般有两段时间可以叫作流片。 流片&#xff1a;英…...

fontfaceobserver 第三方字体加载优化方案

fontfaceobserver 第三方字体加载优化方案 1. github地址 https://github.com/bramstein/fontfaceobserver 2. 基础使用方法 const font new FontFaceObserver(My Family, {weight: 400 });font.load().then(function () {console.log(Font is available); }, function ()…...

laravel安装composer依赖

一.问题描述 拉取的新项目没有依赖 项目根目录没有vendor目录 报错 二.安装composer,拉取依赖 1.如果没有composer先去下载 官网地址:Packagist / Composer 中国全量镜像 我的博客安装composer:composer最新版本安装_荒-漠的博客-CSDN博客 2.进入项目根目录cmd或者在项目中…...

问题聚集度Hive SQL

问题聚集度&#xff1a;最小的分母占比&#xff0c;贡献最多的分子占比&#xff0c;即小规模贡献大问题。 selectcity_name,user_id,rf_type,deal_ord_cnt,sale_amt,rf_ord_cnt,rf_amt,rf_ra,rf_amt_ra,rf_all,ord_cnt_all,rf_gx,ord_cnt_gx,del_gx,row_number() over(partiti…...

Windows11右键菜单

刚开始使用Windows11时&#xff0c;新的右键菜单用起来很不习惯。 记录一下修改和恢复Windows11的右键菜单的方法。 1.Win11切换到旧版右键菜单&#xff1a; 方法&#xff1a;WinR打开CMD&#xff0c;运行下面的命令行 添加注册列表重启Windows资源管理器 reg add "HKC…...

篇十四:观察者模式:对象间的通知与更新

篇十四&#xff1a;“观察者模式&#xff1a;对象间的通知与更新” 设计模式是软件开发中的重要知识&#xff0c;观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;用于在对象间建立一种一对多的依赖关系&#xff0c;当一个对象的状态发生…...

Hadoop知识点总结

1. MapReduce中Shuffle的执行流程是什么样的&#xff1f; - 阶段&#xff1a;Map端Shuffle、Reduce端Shuffle - 功能&#xff1a;分区、排序、分组 Map端Shuffle 分区(Partition)&#xff1a;在这个阶段&#xff0c;Map任务会调用分区器&#xff0c;根据Key的Hash值取模&a…...

相关搜索量激增10000%!“芭比周边”产品火爆亚马逊!

据外媒报道&#xff0c;芭比娃娃是今年夏天最热的话题。今年7月份&#xff0c;“芭比娃娃”是亚马逊上搜索最多的词。第二季度&#xff0c;Shopify上的芭比娃娃销量激增了56%。知名玩具制造商美泰&#xff08;Mattel&#xff09;预计&#xff0c;受电影的推动&#xff0c;在未来…...

C高级第四讲

1、思维导图 2、写一个shell函数&#xff0c;获取用户的uid和gid并使用变量接收 #!/bin/bash function get_id() {uidid -u ubuntugidid -g ubuntu } get_id echo "uid:$uid" echo "gid:$gid"运行结果 3、排序 冒泡排序 /* ------------------------…...

Idea小操作

Idea操作 idea提取内容构成一个方法 idea提取内容构成一个方法...

【计算机网络】socket编程

文章目录 1. 网络通信的理解2.进程PID可以取代端口号吗&#xff1f;3. 认识TCP协议4. 认识 UDP协议5. socket编程接口udp_server.hpp的代码解析socket——创建 socket 文件描述符Initserver——初始化1.创建套接字接口&#xff0c;打开网络文件bind——绑定的使用 2.给服务器指…...

2023华为OD机试真题 Python 实现【寻找最大价值的矿堆/深度优先搜索】

前言 本题使用Python解答,如果需要Java代码,请点击以下链接:点我 题目 我们规定,0表示空地,1表示银矿、2表示金矿,矿堆表示由相邻的金矿或银矿连接形成的地图。 银矿价值是1 ,金矿价值是2 ,你的目标是找出地图中最大价值的矿堆,并且输出该矿堆的价值 示例1 输入:…...

【Java面试】Nacos自动注册原理实现以及服务注册更新并如何保存到注册表

文章目录 Nacos自动注册原理实现服务注册更新并如何保存到注册表 Nacos自动注册原理实现 完整流程 我们知道SpringBoot提供了挂载点的方式来帮助我们的类完成自动注入。 Nacos再META-INF的spring.factories这个文件中添加了自己需要自动注入的Bean对象。 叫做NacosServiceRegi…...

linux 手动编译安装 pkg-config 步骤

1. 下载源码 Index of /releases (pkg-config.freedesktop.org) 2. 解压 并 进入解压后的文件夹 3. 运行配置文件 ./configure 错误解决办法&#xff1a;在linux中使用 ./configure 时报错 4. 编译、 自检、 安装 make make check make install 5. 安装完成后查看版本号…...

【MongoDB】数据库、集合、文档常用CRUD命令

目录 一、数据库操作 1、创建数据库操作 2、查看当前有哪些数据库 3、查看当前在使用哪个数据库 4、删除数据库 二、集合操作 1、查看有哪些集合 2、删除集合 3、创建集合 三、文档基本操作 1、插入数据 2、查询数据 3、删除数据 4、修改数据 四、文档分页查询 …...

【JVM】是如何管理内存的

文章目录 JVM 内存管理 模型JVM内存管理示例解析jvm 常见优化手段 JVM 内存管理 模型 以下是JVM内存管理的详细图示&#xff1a; ------------------------------------------------------ | Java 运行时数据区 | ------…...

进程与线程、线程创建、线程周期、多线程安全和线程池(ThreadPoolExecutor)

目录 进程与线程线程和进程的区别是什么&#xff1f;线程分两种&#xff1a;用户线程和守护线程线程创建四种方式run()和start()方法区别&#xff1a;为什么调用 start() 方法时会执行 run() 方法&#xff0c;为什么不能直接调用 run() 方法&#xff1f;Runnable接口和Callable…...

《论文阅读13》Efficient Urban-scale Point Clouds Segmentationwith BEV Projection

一、论文 研究领域&#xff1a; 城市级3D语义分割论文&#xff1a;Efficient Urban-scale Point Clouds Segmentationwith BEV Projection论文链接 注&#xff1a; BEV&#xff1a; Birds Eye View BEV投影是指鸟瞰视角(Birds Eye View,简称BEV)的一种从上方观看对象或场景的…...

Django实现音乐网站 ⑻

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是后台对单曲原有功能的基础上进行部分功能实现和显示优化。 目录 新增编辑 歌手下拉显示修改 设置歌曲时长 安装eyed3库 获取mp3时长 歌曲时长字段修改 重写save方法 增加歌手单曲数量 查询歌手单曲数量 …...

VScode中同时打开两个脚本

使用快捷键&#xff1a; CtrlAltRightArrow 效果&#xff1a; 可以看到&#xff0c;上述两个脚本使用独立的窗口进行编辑和查看。...