目录
1.初始化二维数组
2.使用二维数组
for循环是一种处理数组的工具。下面进一步讨论如何使用嵌套for循环中来处理二维数组。
C++没有提供二维数组类型,但是用户可以创建每个元素本身都是数组的数组。例如,假设要存储5个城市在4年间的最高温度,可以这样声明数组:
int maxtemps[4][5];
该声明意味着maxtemps是一个包含4个元素的数组,其中每个元素都是一个由5个整数组成的数组。可以将maxtemps数组看作4行组成,其中每一行有5个温度值。
表达式maxtemps[0]是maxtemps数组的第一个元素,因此maxtemps[0]本身就是一个由5个int组成的数组。maxtemps[0]数组的第一个元素是maxtemps[0][0],该元素是一个int。因此,需要使用两个下标来访问int元素。可以认为第一个下标表示行,第二个下标表示列(如下图)。
假设要打印数组所有的内容,可以用一个for循环来改变行,用另一个被嵌套的for循环来改变列:
for(int row = 0;row < 4;row++)
{
for(int col = 0;col < 5;++col)//对于每个row值,内部的for循环将遍历所有的col值
cout << maxtemps[row][col] << "\t";//在每个值之后打印一个制表符
cout << endl;//打印完每行后,打印一个换行符
}
1.初始化二维数组
创建二维数组时,可以初始化其所有元素。这项技术建立在一维数组初始化技术的基础之上:提供由逗号分隔的用花括号括起的值列表:
int btus[5] = {23,26,24,31,28};
对于二维数组来说,由于每个元素本身就是一个数组,因此可以使用与上述代码类似的格式来初始化每一个元素。因此,初始化由一系列逗号分隔的一维数组初始化(用花括号括起)组成:
int maxtemps[4][5] =
{
{96,100,87,101,105}, //values for maxtemps[0]
{96,98,91,107,104}, //values for maxtemps[1]
{97,101,93,108,107}, //values for maxtemps[2]
{98,103,95,109,108} //values for maxtemps[3]
};
可将数组maxtemps包含4行,每行包含5个数字。
2.使用二维数组
程序清单5.20初始化了一个二维数组,并使用了一个嵌套循环。这一次,循环的顺序相反,将列循环(城市索引)放在外面,将行循环(年份索引)放在里面。
另外,它还采用了C++常用的做法,将一个指针数组初始化为一组字符串常量。也就是说,将cities声明为一个char指针数组。这使得每个元素(如cities[0])都是一个char指针,可被初始化为一个字符串的地址。
//5.20
#if 1
#include<iostream>
using namespace std;
const int Cities = 5;
const int Years = 4;
int main()
{
const char * cities[Cities] =
{
"Gribble City",
"Gribbletown",
"New Gribble",
"San Gribble",
"Gribble Vista"
};
int maxtemps[Years][Cities] =
{
{ 96, 100, 87, 101, 105 }, //values for maxtemps[0]
{ 96, 98, 91, 107, 104 }, //values for maxtemps[1]
{ 97, 101, 93, 108, 107 }, //values for maxtemps[2]
{ 98, 103, 95, 109, 108 } //values for maxtemps[3]
};
cout << "Maximum temperatures for 2008 - 2011\n\n";
for (int city = 0; city < Cities; city++)
{
cout << cities[city] << ":\t";
for (int year = 0; year < Years; year++)
cout << maxtemps[year][city] << "\t";
cout << endl;
}
system("pause");
return 0;
}
#endif