zoukankan      html  css  js  c++  java
  • 字符串和数组----多维数组

    一、初始化

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

      允许使用花括号括起来的一组值初始化多维数组。类似一维数组,在初始化多维数组时,也并非所有元素的值都必须包含在初始化列表中,未列出的值执行值初始化

     1 int main()
     2 {
     3     int arr[3][4] = {
     4         {0,1,2},
     5         {4,5,6}
     6     };
     7     for (int i = 0; i < 3;++i)
     8     {
     9         for (int j = 0; j < 4;++j)
    10         {
    11             std::cout << arr[i][j] << " ";
    12         }
    13         std::cout << std::endl;
    14     }
    15     return 0;
    16 }

    输出:

      其中,内层嵌套着的花括号也并非必需的,多维数组按序初始化,剩下的执行值初始化

     1 int main()
     2 {
     3     int arr[3][4] = {
     4         0,1,2,4,5,6
     5     };
     6     for (int i = 0; i < 3;++i)
     7     {
     8         for (int j = 0; j < 4;++j)
     9         {
    10             std::cout << arr[i][j] << " ";
    11         }
    12         std::cout << std::endl;
    13     }
    14     return 0;
    15 }

    二、使用范围for语句处理多维数组

      要使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都是引用类型。因为如果不是引用的话,当使用数组作为一个auto变量的初始值时,推断得到的是指针而非数组。

     1 int main()
     2 {
     3     int arr[3][4] = {0};
     4     for (auto &row:arr)
     5     {
     6         for (auto col:row)
     7         {
     8             std::cout << col << " ";
     9         }
    10         std::cout << std::endl;
    11     }
    12     return 0;
    13 }

     三、指针和数组

      当程序使用多维数组的名字时,也会自动将其转换成指向数组首元素的指针。定义指向多维数组的指针时,千万别忘了这个多维数组实际上是数组的数组。所以由多维数组名转换得来的指针实际上是指向第一个内层数组的指针。

     1 int main()
     2 {
     3     int arr[3][4] = { 0 };
     4     for (auto p = arr; p != arr + 3;++p)
     5     {
     6         for (auto q = *p; q != *p + 4; ++q)
     7             std::cout << *q << " ";
     8         std::cout << std::endl;
     9     }
    10     return 0;
    11 }

      使用标准库函数begin和end也能实现同样的功能。

     1 int main()
     2 {
     3     int arr[3][4] = { 0 };
     4     for (auto p = std::begin(arr); p != std::end(arr);++p)
     5     {
     6         for (auto q = std::begin(*p); q != std::end(*p); ++q)
     7             std::cout << *q << " ";
     8         std::cout << std::endl;
     9     }
    10     return 0;
    11 }
  • 相关阅读:
    女程序员这么少是因为怕秃头?如果你这样想,那就错了...
    使用简单的c#示例的坚实的架构原则
    第1部分设计模式FAQ(培训)
    为什么微软部分类和Java不?
    现实世界四部分类和部分方法的使用
    回到基础:n层ASP的异常管理设计指南。网络应用
    学习c#(第9天):理解c#中的事件(一种见解)
    EventBroker:同步和异步通知组件,松散耦合的事件处理
    潜水在OOP(第一天):多态和继承(早期绑定/编译时多态)
    学习c#(第8天):c#中的索引器(一种实用方法)
  • 原文地址:https://www.cnblogs.com/ACGame/p/10074243.html
Copyright © 2011-2022 走看看