C++之多维数组

来源:互联网 发布:招行一金通软件下载 编辑:程序博客网 时间:2024/06/14 07:56

通常所说的多维数组其实是数组的数组。
当一个数组的元素仍是数组时,通常使用两个维度来定义它:一个维度表示数组本身的大小,另一个维度表示其元素(也是数组)的大小:

int ia[3][4];//大小为3个数组,每个元素是含4个整数的数组
  • 多维数组的初始化
    允许使用花括号括起来的一组值初始化多维数组。
int ia[3][4] = {//三个元素,每个元素都是大小为4的数组    {0,1,2,3}//第1行的初始值    {4,5,6,7}//第2行的初始值    {,8,9,10,11}//第3行的初始值};

其中内层嵌套的花括号并非必需的:

//没有每行的花括号,与之前的初始化语句是等价的int ia[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
//显示地初始化每行的首元素int ia[3][4] = {{0},{4},{8}};
//显示地初始化第一行,其他元素执行值初始化int ix[3][4] = {0,3,6,9};
  • 多维数组的下标引用
//程序中经常会用到两层嵌套的for循环来处理多维数组的元素constexpr size_t rowCnt = 3,colCnt = 4;int ia[rowCnt][colCnt];//对于每一行for(size_t i = 0;i != rowCnt;++i){    //对于每一列    for(size_t j = 0;j !=colCnt;++j)    {    //将元素的位置索引作为它的值    ia[i][j] = i * colCnt + j;    }}
  • 使用范围for循环
    前一个程序可以简化为如下形式;
size_t cnt  = 0;for (auto &row : ia)    for(auto &col : row)    {        col = cnt;        ++cnt;    }

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

  • 指针和多维数组
    应为多维数组实际上是数组的数组,所以多维数组名转换的指针实际上是指向第一个内层数组的指针。
int ia[3][4];int (*p)[4] = ia;//p指向含有4个整数的数组p = &ia[2];//p指向ia的尾元素

随着C++11新标准的提出,通过使用auto 或者decltype就能尽可能的避免在数组前面加上一个指针类型。

//输出ia中的每个元素,每个内层数组各占一行for (auto p = begine(ia);p != end(ia);++p){    for (auto q = begine(*p);q != end(*p);++q)        cout << *q << '';   cout << endl;}
原创粉丝点击