【C++】学习笔记十九——嵌套循环和二维数组

嵌套循环和二维数组

int maxtemps[4][5];

该声明意味maxtemps是一个包含4个元素的数组,其中每个元素都是一个由5个整数组成的数组。
可以将mantemps看作有4行组成,其中每一行有5个整数值。

maxtemps[0]是maxtemps数组的地一个元素,因此maxtemps[0]本身就是一个由5个int组成的数组。
maxtemps[0]的的一个元素是maxtemps[0][0],该元素是一个int。可以认为第一个下标表示行,第二个下标表示列。

假设要打印数组所有的内容,可以用一个for循环来改变行,用另一个被嵌套的for循环来改变列:

for (int row = 0; row < 4; row++)
{
    for (int col = 0; col < 5; ++col)
        cout << maxtemps[row][col] << "\t";
    cout << endl;
}

1. 初始化二维数组

  创建二维数组时,可以初始化其所有元素。由于每个元素本身就是一个数组,因此,初始化由一系列逗号分隔的一维数组初始化组成:

int maxtemps[4][5] = 
{
    {96, 100, 87, 101, 105},
    {96, 98, 91, 107, 104},
    {97, 101, 93, 108, 107},
    {98, 103, 95, 109, 108}
};

程序5.20

#include<iostream>
const int Cities = 5;
const int Years = 4;
int main()
{
    using namespace std;
    const char * cities[Cities]=
    {
        "Gribble City",
        "Gribbletown",
        "New Gribble",
        "San Gribble",
        "Gribble Vista"
    };

    int maxtemps[Years][Cities]=
    {
        {96, 100, 87, 101, 105},
        {96, 98, 91, 107, 104},
        {97, 101, 93, 108, 107},
        {98, 103, 95, 109, 108}
    };

    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;
    }

    return 0;
}

这里写图片描述

  程序5.20初始化了一个二维数组,并使用了一个嵌套循环。这一次循环的书序相反,将列循环(城市索引)放在外面,将行循环(年份索引)放在里面。另外,它还将一个指针数组初始化为一组字符串常量。也就是说,将cities声明为一个char指针数组。这使得每个元素都是一个char指针,可被初始化为一个字符串的地址,程序将cities[0]初始化为字符串”Gribble City”的地址。因此,该指针数组的行为与字符串数组类似。
  在这个例子中,可以使用char数组的数组,而不是字符串指针数组:

char cities[Cities][25] = 
{
    "Gribble City",
        "Gribbletown",
        "New Gribble",
        "San Gribble",
        "Gribble Vista"
};

  上述方法将全部5个字符串的最大长度限制为24个字符。指针数组存储5个字符串的地址,而是用char数组的数组时,将5个字符串分别复制到5个包含25个元素的char数组中,因此,从存储空间的角度说,使用指针数组更为经济;然而,如果要修改其中任何一个字符穿,则二维数组是更好的选择。这两种方法使用的初始化列表相同,显示字符串的for循环相同。

   另外,还可以使用string对象数组,而不是字符串指针数组:

const string cities[Cities] = 
{
    "Gribble City",
    "Gribbletown",
    "New Gribble",
    "San Gribble",
    "Gribble Vista"
};

  如果希望字符串是可修改的,应省略const。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值