zoukankan      html  css  js  c++  java
  • 你好,C++(12)怎样管理多个类型同样性质同样的数据?3.6 数组

    3.6  数组

    学过前面的基本数据类型之后,我们如今能够定义单个变量来表示单个的数据。比如,我们能够用int类型定义变量来表示公交车的216路;能够用float类型定义变量来表示西红柿3.5元一斤。

    可是,除了单个孤立的数据之外,现实世界中另一类批量数据。比如,一个公司全部员工的工资,这些数据的数据类型同样(都是int类型),性质同样(都表示员工的工资),数量非常多(成千上万员工的工资)。而且往往形成一个有意义的数据集合(员工工资)。针对这类的批量数据,单独地定义一个一个的变量来表示显然是行不通的。

    为此,C++提供了数组这样的构造型数据类型来表达批量数据,它将这些数据组织起来形成一个数据序列。让这些数据排排坐。吃果果,极大地方便了批量数据的处理。

    3.6.1  数组的声明与初始化

    在C++中,定义一个数组的方法同定义一个变量的方式很相似,不同的是,变量名变成了数组名。而在数组名之后,我们用中括号“[]”引出了表示数组中数据元素个数的常数。

    其详细语法形式例如以下:

    数据类型 数组名[个数常量][个数常量]…;

    当中,数据类型表示这一系列批量数据的类型。

    比方。我们要定义一个能够保存多位员工工资的数组,而每一个员工工资数据都能够用int类型数据表示。那么整个数组的数据类型就是int类型;数组名一般是一个表明数组中数据含义的标识符。在这里,数组中的数据都是员工工资,所以我们能够用arrSalary作为数组名。

    当中,arr表示这是一个数组(array),而Salary则表示数组中的数据都是工资;数组名后中括号里的个数常量则表示这一系列批量数据的个数。

    比方。这个公司有100000位员工,我们须要在数组中保存100000个工资数据,那么这个个数常量自然就是100000。另外须要注意的是,这个个数常量必须大于0,而且必须是常数。

    依据上面的分析,我们能够这样来定义用以保存100000个员工工资数据的数组:

    // 保存100000个员工工资的数组
    int arrSalary[100000];

    在定义数组的同一时候。也能够利用“{}”对数组进行初始化。

    比如:

    // 定义数组并进行初始化
    int nArray[5] = { 12345 };  

    这行代码在定义一个长度为5的整型数组nArray的同一时候,用“{}”把1、2、3、4、5分别赋值给数组中的5个元素,以此来完毕数组的初始化。当然。假设不须要对数组中的全部数据都赋初始值。也能够仅对数组的前面部分元素赋值。而剩余的未指定初始值的数据。会被赋值为0或是这样的数据的默认初始值。

    比如:

    // 给定数组中前6个元素的初始值,剩下94个数据被赋值为0
    int nBigArray[100] = { -10, 23, 542, 33, 543, 87 };

    尽管我们能够利用“{}”在定义数组的同一时候对数组元素赋初始值。但是数组的数据元素往往较多。要想使用“{}”完毕当中全部数据的赋值,往往是不太现实的。很多其它的时候,我们是利用“{}”将数组中的全部元素都赋值为0,完毕数组使用前的清零操作。比如:

    // 将nBigArray数组中的全部元素赋值为0
    int nBigArray[100] = { 0 };

    知道很多其它:多维数组

    数组定义中的中括号“[ ]”用于确定数组的维数。

    在数组名后有几个“[ ]”就表示这是一个几维数组,而一个数组的维数,往往代表了当中数据的分类次数。比方。我们要表示一个学校全部学生的成绩,我们往往先把全部学生成绩依照年级分成三个年级,然后每一个年级又能够依照班级分成10个班级。而每一个班级又有30名学生。

    这样,经过三次分类,我们就能够用一个三维数组来保存一个学校全部学生的成绩:

    // 记录学生成绩三维数组
    int arrScore[3][10][30];

    3.6.2  数组的使用

    定义好数组后,我们就相当于拥有了多个变量,能够引用数组中的数据元素来进行运算。

    要想訪问数组中的各个数据。我们通过在数组名后的中括号里给定数组下标来实现。

    所谓数组下标,它代表了要訪问的数据在数组中的位置。

    要注意的是,这个表示数据位置的下标是从0開始记数的。比方。在我们前面定义的记录员工工资的arrSalary数组中。第一个数据是老板的工资,我们就能够通过例如以下的方式来读写訪问第一个数据:

    // 数组中第一个数据表示老板的工资,用下标0表示数组的第一个数据
    // 赋值为1,表示老板的工资为1
    arrSalary[0] = 1// 读取数组中的第一个数据,输出老板的工资
    cout<<"老板的工资是:"<<arrSalary[0]<<endl;

    这里我们能够看到,通过在数组名之后的中括号里给定0这个下标,我们能够像读写普通变量一样地来读写数组中的第一个数据。以此类推,要想訪问数组中的第二个数据。数组下标就应该是1,要想訪问第n个数据,下标就应该是n-1。比如:

    // 数组中的第二个数据表示老板娘的工资, 给定下标1訪问
    arrSalary[1] = 99999;
    // 往后依次就是各个员工的工资
    arrSalary[2] = 2000;
    //

    在使用数组下标时。另外须要注意的一个地方是,下标必须大于等于0小于数组定义时的个数常数。简单来讲。一个长度为n的数组,其下标的取值范围是[0。n-1]。假设下标的取值超出了这个范围。就会訪问到数组以外的内存区域。引起数组訪问越界的错误,轻则造成数据读写错误,严重时甚至会导致程序崩溃。而且,这样的错误极具隐蔽性,往往非常难发现。所以我们一開始在使用数组时。就一定要时刻注意防止数组訪问越界。

    数组下标与数组中数据元素的相应关系例如以下图所看到的:

                           

    图3-3 数组中数据元素与下标的相应关系

    相同的道理。对于二维数组、三维数组等多维数组。相同能够通过给定多个下标来訪问数组中的数据元素。比如:

    // 第一个年级。第二个班级,第26位同学的成绩是82
    arrScore[0][1][25] = 82;

    这里我们能够看到。通过下标对数组中元素进行读写訪问,就像使用一个单独的变量一样简单。有了数组的帮忙。我们在描写叙述大量性质同样的数据时。就无须单独地定义多个同样类型的变量,而仅仅需定义一个能容纳须要处理数据的数组,然后通过不同的下标就能够訪问到不同的数据。也就像拥有多个单独变量一样方便。

  • 相关阅读:
    LeetCode 189. Rotate Array
    LeetCode 965. Univalued Binary Tree
    LeetCode 111. Minimum Depth of Binary Tree
    LeetCode 104. Maximum Depth of Binary Tree
    Windows下MySQL的安装与配置
    LeetCode 58. Length of Last Word
    LeetCode 41. First Missing Positive
    LeetCode 283. Move Zeroes
    《蚂蚁金服11.11:支付宝和蚂蚁花呗的技术架构及实践》读后感
    删除docker下的镜像
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5282994.html
Copyright © 2011-2022 走看看