第五单元 数组
重点:
数组就是一组相同类型的变量,他们往往都是为了表示同一批对象的统一属性,数组可以是一维的,也可以是二维的或多维的。
一位定义一维数组的格式如下:
类型标识符 数组名 [常量表达式];
其中,类型标识符可以是任何基本数据类型,也可以是结构体等构造类型,相同类型的数组可以一起定义。数组名必须是合法的标识符。常量表达式的值即为数组元素的个数。
如果定义一个有50个元素的数组h,则它们的编号从0开始到49,eg:h[0~49]
数组定义好后,可以引用数组中的任意一个元素,引用格式为:数组名 [下标],数组下标从0开始计数,下标的值不应超过常量表达式最大值减1。
!!注意:不能一次引用整个数组,只能逐个引用数组的单个元素。
批量数据可以使用键盘读入和直接赋值的方法,一次性输入到一维数组中
C++里还提供了两个函数给数组整体赋值memset函数
memset函数是给数组按字节进行赋值,一般用在char型数组中,如果是int类型的数组,一般赋值为0和-1.使用前需要包含头文件
#include<cstring>。
此函数只起清零作用,格式为
memset(h,0,sizeof(h)),就是将h数组中所有元素均服值为零。
fill函数
fill函数是给数组按元素进行赋值,可以是整个数组,也可以是部分连续元素,可以赋任何值,使用前需要包含头文件#include<algorithm>。
例如fill(a,a+10,5)就是将a数组的前10个元素赋值为5。
另外,C++还支持在定义数组的同时,给所有或者部分元素赋值。
例如:
a[10]={0,1,2,3,4,5,6,7,8,9};
int a[10]={0,1,2,3,4,};
部分赋初值后面的元素自动初始化为零
a[]={1,2,3,4,5,};
不定义数组长度,直接根据赋值个数定
数组的插入删除操作:
插入一个元素,需要先找到插入的位置,假设下标为x,将这个元素及其之后的所有元素依次往后移一位,注意要从后往前进行操作,再将给定的元素插入或覆盖到位置x。删除某一个元素,也需要先找到删除的位置,假设下表为x将下标为x+1及其之后的所有元素,依次向前移一位覆盖原来位置上的元素。插入或者删除一个区间(连续若干个数)只要重复以上单个元素的操作即可。另外,插入操作需要注意把数组下标定义的足够大。
例1 插队问题。
【问题描述】
有n个人(每个人有一个唯一的编号,用1~n之间的整数表示)在一个水龙头前排队准备接水,现在第n个人有特殊情况,经过协商,大家允许他插队到第x个位置。输出第n个人插队后的排队情况
【输出格式】
第一行一个正整数n,表示有n个人,2<n≤100
第二行包含n个正整数之间,用一个空格隔开表示排在队伍中的第1~第n个人的编号。
第三行包含一个正整数x,表示第n个人插队的位置1≤x<n。
【输出格式】
一行包含n个正整数,之间用一个空格隔开,表示第n个人插队后的排队情况。
【输入样例】
7
7 2 3 4 5 6 1
3
【输出样例】
7 2 1 3 4 5 6
【问题分析】
N个人的排队情况可以用数组q表示,q[i]表示排在第i个位置上的人。定义数组时多定义一个位置,然后重复执行:q[i+1]=q[i],其中,从n~x。最后再执行q[x]=q[n+1],输出q[1]~q[n]。
//p5-3