IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> C++由变量定义的数组如何初始化?(以整型、布尔数组为例) -> 正文阅读

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

背景:

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


问题描述

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

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


原因一分析:

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

    void setZeroes(vector<vector<int>>& 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<vector<int>>& matrix)
{
    int row = matrix.size();
    int* array = new int[row];

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

    delete[] array;
    array = NULL;

原因二解决方案:

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

void init_arr(vector<vector<int>>& 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 <iostream>
#include <vector>
using namespace std;

void init_arr(vector<vector<int>>& matrix)
{
    int row = matrix.size();
    int column = matrix[0].size();
    vector<int> arr;
    arr.resize(row, 1);
    for (auto it = arr.begin(); it != arr.end(); it++) cout << *it << endl;
}
int main()
{
    vector<vector<int>>matrix(10);
    matrix[0].resize(10, 0);//创建一个10*10的矩阵
    init_arr(matrix);
    return 0;
}

所以,多定义vector数组吧,当然如果遇到二维多维的问题,可以去看我上一篇文章。搞懂了三维等更多维也可以很轻松定义解决!!

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 23:02:30  更:2022-04-07 23:02:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 21:08:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码