二维数组
引言
什么是二维数组,所谓二维又是个什么意思?
在介绍二维数组之前,我们先来回顾一下一维数组,它长什么样子呢:
或者想象成一行N列也是可以的。
那二维数组长什么样子呢:
相信大家看过这两个表格之后对一维和二维有了初步的认识,那么下面让我们总结一下,所谓一维数组就是只有行的概念或者又有列的概念,而二维数组具备了行与列二者的概念,有时候我们神之力可以理解一维数组是二维数组的一种特殊形式。
定义二维数组
在上一篇文章中我们知道了一维数组的定义,形如:int a[3];
为定义一个一维数组的语句,这里二维数组的定义语句在外观上是非常相似的,但因为二维数组引入了行与列的概念后,它就成了这个样子:
float a[3][4];
这里定义了一个名字为a的类型为浮点型的三行四列的二维数组。
一般教材会给出这样的定义:类型名 数组名 [常量表达式] [常量表达式]
对于 a[3][4]
来说,它的元素最大个数是行与列的乘积也就是:3*4=12个,具体的排布规律如下图:
是的,同为数组,当然也应该具备同样的下表概念,0为开始。
引用二维数组元素
如果给你了你一二维数组,让你提取数组里面的一页元素,你会如何判断他是哪一个元素吗?
[2] [2]的字母是哪一个?我们知道,在引用数组的时候所有的下表都是从0开始数的[2] [2]真正所代表的是这个位置:
所以,若是我们想引用最右下角的B那就要用[3] [3]的命令来进行使用该元素。
二维数组的初始化
对于二维数组的初始化C++同样提供了非常灵活的几种初始化方案:
-
按行给二维数组全部赋初值:
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
可以看到在初始化语句中三行四列的语句中全部的到元素填充,观察到在整个初始化语句中{1,2,3,4}为一组,{5,6,7,8}为一组,{9,10,11,12}为一组,分别占据了数组的三行,而其中用逗号隔开的四个元素分别占据四列。这就是第一种赋值方案。
-
按照数组排列顺序对全部元素赋值:
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
这种赋值的方式让我们在书写元素更加的方便,同样四个四个为一组,系统自动识别并且按照顺序对元素赋值。
-
可以给部分元素赋值:
int a[3][4] = {{1},{2},{3}};
与之对应的数组元素,除了第一列,其他全为0:
-
行缺省:
int [][4] = {1,2,3,4,5,6,7,8};
对于这样的语句也是合法的,编译器会自动根据列与元素的数量与个数来计算行的数值。
程序例题
-
将一个2*3的二维数组a的行和列
转换后 :
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
char a[2][3] = {'1','2','3','A','B','C'};
char b[3][2];
int i, j;
cout << "array a:" << endl;
for (i = 0; i <= 1; i++) {
for (j = 0; j <= 2; j++) {
cout << a[i][j] << " ";
b[j][i] = a[i][j];
}
cout << endl;
}
cout << "array b:" << endl;
for (i = 0;i <= 2; i++) {
for (j = 0; j <= 1; j++) {
cout << b[i][j] << " ";
}
cout << endl;
}
}
array a:
1 2 3
A B C
array b:
1 A
2 B
3 C
- 有一个3*4的矩阵,要求求出其中最大的值,以及所在的行号与列号。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int a[3][4] = { {12,14,76,2},{-45,32,55,0},{123,66,98,-88} };
int max = a[0][0], i, j,max_i,max_j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
if (a[i][j] > max) {
max = a[i][j];
max_i = i;
max_j = j;
}
}
}
cout << "the max is:" << max << " and it located :" << "a" << "[" << max_i << "]" << "[" << max_j << "]";
}
the max is:123 and it located :a[2][0]