多维数组(个人笔记)

// 3.6.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//3.6 多维数组

#include <iostream>
using namespace std;
int main()
{
    //严格来说,通常所说的数组其实就是数组的数组
    //int ia[3][4];//大小为3的数组,每个元素是含有4个整数的的数组
    //大小为10的数组,每个元素都是大小为20的数组
    //这些数组的元素含有30个整数的数组
    int arr[10][20][30] = { 0 };

    //多为数组的初始化
    int ia[3][4] = { //三个元素,每个元素都是大小为4的数组
        {0,1,2,3},//第一行的初始值
        {4,5,6,7},//第二行的初始值
        {8,9,10,11}//第三行的初始值
                    };
    //没有标识每行的花括号
    int ia1[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };
    //显示地初始化每行的首元素
    int ia3[3][4] = { {0},{4},{8} };
    //显式地初始化第一行,其他元素执行值初始化,被初始化为0
    int ix[3][4] = { 0,1,2,3 };

    //多维数组的下标引用
    ia[2][3] = arr[0][0][0];//用arr的首元素为ia最后一行的最后一个元素赋值
    int(&row)[4] = ia[1];//把row绑定到ia的第二个4个元素数组上

    //两层嵌套的for循环来处理多维数组的元素
    constexpr size_t rowCnt = 3, colCnt = 4;
    int ia4[rowCnt][colCnt];
    //对于每一行
    for (size_t i = 0; i != rowCnt; ++i) {
        //对于每一列
        for (size_t j = 0; j != colCnt; ++j) {
            ia4[i][j] = i * colCnt + j;
            cout << ia4[i][j] << endl;
        }
    }
    //外层for循环遍历ia的所有元素,这里的元素是一维数组;内层的for循环则遍历那些一维数组的
    //的整数元素。
    
    //使用范围for语句处理多维数组
    size_t cnt = 0;
    for (auto& row : ia4)
        for (auto& col : row) {
            col = cnt;
            ++cnt;
        }
    //要使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都
    //应该是引用类型

    //指针和多维数组
    //定义指向多维数组的指针时,千万别忘了这个多维数组实际上时数组的数组
    //因为多维数组实际上是数组的数组,所以由多维数组转换得来的指针实际上是
    //指向第一个内层数组的指针
    int ia5[3][4] = {};//大小为3的数组,每个元素是含有4个整数的数组
    int(*p)[4] = ia5;//p指向含有4个整数的数组
    p = &ia5[2];//p指向ia的尾元素

    //上述生命中,圆括号必不可少
    //int *ip[4];//整形指针的数组
    //int (*ip)[4];//指向含有4个整数的数组
    //通过使用auto或decltype就能尽可能避免在数组前面加上一个指针类型了
    for (auto p = ia5; p != ia5 + 3; ++p) {
        for (auto q = *p; q != *p + 4; ++q)
            cout << *q << ' ';
        cout << endl;
    }
    cout << endl;
    //使用标准库函数begin和end;
    for (auto p = begin(ia); p != end(ia); ++p) {
        for (auto q = begin(*p); q != end(*p); ++q)
            cout << *q << ' ';
        cout << endl;
    
    }
    //类型别名简化多维数组的指针
    using int_array = int[4];//新标准下类型别名的生命
    typedef int int_array[4];
    //输出ia中每个元素的值,每个内层数组各占一行
    for (int_array* p = ia; p != ia + 3; ++p) {
        for (int* q = *p; q != *p + 4; ++q)
            cout << *q << ' ';
        cout << endl;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值