C++——复杂的数组声明

和vector一样,数组能存放大多数类型的对象。

int *ptrs[10];            //ptrs是含有10个整型指针的数组
int &refs[10] = /* ? */;  //错误:不存在引用的数组
int (*Parray)[10] = &arr; //Parray指向一个含有10个整数的数组
int (&arrRef)[10] = arr;  //arrRef引用一个含有10个整数的数组

对修饰符的数量并没有特殊限制:

int *(&arry)[10] = ptrs; // arry是数组的引用,该数组含有10个指针

首先知道arry是一个引用,如何观察右边,arry引用的对象是一个大小为10的数组,最后观察左边知道,数组的元素类型是指向int的指针,这样arry就是一个含有10个int型指针的数组的引用。

访问数组元素:

在使用数组下标的时候,通常将定义为size_t类型。在cstddef头文件中定义了size_t类型,这个文件是C标准库stddef.h头文件的C++版。

数组除大小固定外,其他用法与vector基本类型。可以用数组来记录各分数段的成绩个数。

unsigned scores[11] = {};
unsigned grade;
while (cin>>grade){
    if(grade <= 100)
        ++scores[grade/10];
}

多维数组

程序中经常会用到两层嵌套的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循环遍历ia的所有元素,内存for循环则遍历那些一维数组的整数元素。


范围for(增强for)处理多维数组:

size_t cnt = 0;
for(auto &row : ia)
    for(auto &col : row) {
        col = cnt;
        ++cnt;
    }
}

之所以要选用引用类型作为循环控制变量,除了可以改变数组元素的值之外,还有一个更深层次的原因:避免数组被自动转成指针。

for (const auto &row : ia)    // 对于外层数组的每一个元素
    for (auto col : row)      // 对于内层数组的每一个元素
        cout << col << endl;

对于范围for循环来说,除了最内层的循环以外,其他所有循环的控制变量都应该是引用类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在这个问题中,用户提供了两段代码,分别是引用\[1\]和引用\[2\]。这两段代码都是用来在一个数组中查找指定数的位置。 引用\[1\]是一个C++代码示例,它使用了iostream和stdio.h头文件,并使用了命名空间std。代码中使用了一个while循环来不断读取输入的n值,然后创建一个大小为n的整型数组a,并通过for循环读取数组的元素。接下来,代码读取了一个整数m,并使用for循环遍历数组a,查找是否有与m相等的元素。如果找到了相等的元素,则将其位置赋值给变量t,并跳出循环。最后,根据t的值输出结果。 引用\[2\]是另一个C代码示例,它使用了stdio.h头文件。代码中同样使用了一个while循环来不断读取输入的n值,然后创建一个大小为n的整型数组a,并通过for循环读取数组的元素。接下来,代码读取了一个整数m,并使用for循环遍历数组a,查找是否有与m相等的元素。如果找到了相等的元素,则将其位置赋值给变量count,并将flag设置为1,表示找到了。最后,根据flag的值输出结果。 综上所述,这两段代码都是用来在一个数组中查找指定数的位置。它们的实现方式略有不同,但都能达到相同的目的。 #### 引用[.reference_title] - *1* [1143: 零起点学算法50——数组中查找数](https://blog.csdn.net/weixin_43965597/article/details/113104995)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [问题 C: 零起点学算法82——数组中查找数](https://blog.csdn.net/chenhannan0024/article/details/127568844)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值