c++学习笔记小记(9)

多维数组

严格来说,c++语言中没有多维数组,所谓的多维数组其实是数组的数组

当一个元素的数组仍是数组时,通常使用两个维度来表示它。一个维度表示数组本身大小,另一个维度表示其元素大小

int a[4][5] ;  //大小为4的数组,每个元素含有5个整数的数组

1. 多维数组的初始化

int a[2][2] = {

{1,2},

{3,4}

}

也可以写成:int a[2][2] = {1,2,3,4};  //与前面的初始化等价

但是当显示初始化不能把数组中的每个元素都初始化时,就会有问题,如下所示:

int a[2][2] = {

{1},

{3}

}  //数组的每一行第一个元素被初始化

当写成int a[2][2] = {1,3};时,相当于数组的第一行两个元素被初始化

2. 多维数组的下标使用

i[1][2] = a[0][1][2];   //数组元素之间的赋值

int (&a)[2] = i[1]; //a是一个引用,该引用中含有四个int类型的数据,i[1]是一个含有四个int类型的数组

2. 范围for循环处理多维数组

for(const auto &r : i)  //对于外层数组的每一个元素

    for( auto c : r)            //对于内层数组的每一个元素

        cout<<c<<endl;

使用范围for循环处理多维数组,除了最内层的循环外,其他所有的循环控制变量都应该是引用类型

3. 指针和多维数组

多维数组实际上是数组的数组,所以由多维数组名转换得来的指针实际上是指向第一个内层数组的指针

int i[2][3];  //大小为2的数组,数组的每个元素是大小为4的数组

int (*p)[3] = i;  //p指向含有三个元素的数组

p = &i[3];  //p指向i的最后一个内层数组

使用auto或者decltype尽可能避免在数组前面加上指针类型

for( auto p = i; p != i+3;++p)

    for( auto q = *p; q != *p+4;++q)

        cout << *q<<" ";

换成begin和end函数后,也能实现同样的功能

for( auto p = begin( i ); p != end( i );++p)

    for( auto q = begin ( *p ); q != end ( *p );++q)

        cout << *q<<" ";

4. 使用类型的别名简化多维数组的指针

using int_arr = int[4];

for( int_arr *p = i; p != i+3; ++p )

    for( int *q = *p; q != *p + 4;++q)

     cout<<*q<<" ";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值