知方号

知方号

C++由变量定义的数组如何初始化?(以整型、布尔数组为例)<数组长度size怎么定义出来>

C++由变量定义的数组如何初始化?(以整型、布尔数组为例)

文章目录 背景:问题描述原因一分析:原因一解决方案:原因二解决方案:原因三解决方案:

背景:

今天作者在用到布尔数组时,想让其初始化的时候里面的值全为true(其实不用那么较真),而由此引发了一系列的问题。(建议还是转换到用vector好很多)因此写文记录一下,希望能帮助到许多入门的小伙伴。如果觉得有帮助就点个赞吧,写了那么多文章一个赞都没有,哭了///

问题描述

其实一共引发了三个问题:

1、定义的数组长度不可为变量(报错:表达式必须含有常量值) 2、由变量定义的动态数组如何直接全体初始化? 3、能不能使用c++的优势达到想要的结果(int bool数组用vector、char数组用string)

原因一分析:

让我们先分析第一个原因: 1、也许有人发现了,为何下面的代码力扣上就可以由变量定义数组长度,而自己的VS上就不行

void setZeroes(vector& matrix) { int row = matrix.size(); int column = matrix[0].size(); bool flag_r[row]; bool flag_c[column];

这其实是因为因为DEV-C++使用的编译器是GCC,它允许使用变量作为数组的长度定义数组。而VC的编译器不是GCC,它不允许这样做。

原因一解决方案:

但是有时我们需要根据输入定义数组的大小。因此,这里就需要用到c++的动态分配了。其实就是使用new关键字,定义步骤如下:

void init_arr(vector& matrix){ int row = matrix.size(); int* array = new int[row];

但是用完之后,一定要记得释放!!

delete[] array; array = NULL; 原因二解决方案:

其实一共有两个解决方法,一个是直接暴力for,第二个是fill函数。此处只介绍fill函数的方法。 如下例中输入函数的矩阵是一个shape为10*10:

void init_arr(vector& matrix){ int row = matrix.size(); int column = matrix[0].size(); int* array = new int[row]; fill(array, array+row, 8);//此处的输出为10个8 delete[] array; array = NULL;} 原因三解决方案:

常量定义的数组很常规也很简单,此处不做过多阐述。而作者更像说明的是,我们能不能别搞那么复杂,更简单地解决问题。

其实布尔数组就是01数组,这个甚至可以用整型数组来代替。因此,数组用vector代替,字符组用string代替。下面可以直接做一个全是true的row长度的数组。(这里代码给全,大家可以自己去test)

#include #include using namespace std;void init_arr(vector& matrix){ int row = matrix.size(); int column = matrix[0].size(); vector arr; arr.resize(row, 1); for (auto it = arr.begin(); it != arr.end(); it++) cout

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。