第三章-数组

文章详细介绍了C++中的数组,包括定义与初始化方法,如指定和不指定维度,字符数组与C风格字符串的区别。还讨论了数组的引用和指针,以及如何使用范围for循环进行遍历。此外,提到了vector和string对象作为替代选项,以及多维数组的处理方式。
摘要由CSDN通过智能技术生成

数组

  • 定义与初始化

    1. 定义
      数组是复合类型,包含数组名和数组维度
      其中数组维度必须是常量表达式
      不允许使用 auto 关键字来推断数组的类型

    2. 初始化
      指明维度,初始值的总数量就不应该超过维度,若还有剩,则剩下的使用默认初始值
      不指明维度,维度大小由列表初始值数量确定

    3. 字符数组
      若用字符串字面值(非 string 对象)初始化字符数组,则字符数组会多占用一个位置放’\0’,这也是 C 风格的字符串

    4. 复杂的数组声明

    int *ptrs[10];//ptrs是含有是个整型指针的数组
    int (*Parray)[10] = &arr;//Parray指向一个含有10个整数的数组,定义数组的指针
    int (&arrRef)[10] = arr;//arrRef是含有10个整数数组的引用
    int *(&array)[10] = ptrs;//array是含有10个整数指针数组的引用
    

    先读括号,然后从数组名字开始从内向外读

  • 访问数组元素
    数组除了大小固定之外,其他用法与 vector 类似
    范围 for 可以实现数组遍历,使用范围 for 是因为系统知道数组的维度(维度属于数组类型的一部分)
    使用普通for循环时,下标的范围由程序员自行检查

  • 指针与数组
    数组名字就是指向数组首元素的指针

    • 指针也是迭代器
      通过数组名字得到指向首元素的指针
      通过&arr[size]得到尾后元素的指针

    • begin 和 end 函数(iterator 头文件中)
      begin 返回数组的首元素指针
      end 返回数组的尾后元素指针

      void test()
      {
          int arr[] = {1, 2, 3, 4, 5, 6};
      
          auto beg = begin(arr);
          auto e = end(arr);
      
          while (beg != e)
          {
              cout << *beg++ << endl;
          }
      }
      
  • 数组初始化 vector 对象
    vector<int> ivec(begin(arr), end(arr));
    不包含end(arr)位置上的值,也可以用部分值来初始化 vector 对象

    尽可能使用 vector 和迭代器,避免使用数组和指针;使用 string 对象,避免使用字符数组

  • 多维数组

    1. 初始化
    2. 下标引用搭配普通 for 循环
    3. 范围 for 循环
    for(auto &row : arr)
        for(auto &col : row)
    

    使用 auto 关键字可以让编译器为我们推断类型
    使用范围 for 循环把管理数组索引的任务交给系统
    使用范围 for 循环时,除了最内层的循环外,其他循环都应该是引用类型(避免编译器将数组形式的元素转换为指向该数组内首元素的指针

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值