当前位置: 首页 > news >正文

C/C++数据结构之多维数组

概述

        多维数组,实际上就是“数组的数组”。最常见的是二维数组,就像一个表格,拥有行和列。而三维数组则可以想象为多个这样的表格堆叠起来形成的一个立方体。依此类推,我们可以构建四维、五维甚至更高维度的数组。

        多维数组主要用于表示具有多个属性的数据集合。在计算机图形学中,图像可以被视为二维像素矩阵。在科学计算中,物理场可能需要三维数组来表示。另外,棋盘类游戏中的棋盘通常是一个固定大小的网格,实际上也是一个多维数组。比如:国际象棋的棋盘是一个8 x 8的网格,可以用二维静态数组来表示。

声明与初始化

        我们以二维数组为例,来说明如何进行声明与初始化。声明一个多维数组,首先需要明确指定数组的类型和每个维度的尺寸。声明格式通常如下:

                type arrayName[size1][size2];

        其中,type代表数组中元素的数据类型(比如:int、float等),而size1和size2则是在编译期可以确定的一个常量值或常量表达式,表示数组在一维和二维分别能够容纳的元素个数。比如:要声明一个3 x 4的二维数组,可以写为如下代码。

int paNumber[3][4];

        其中,paNumber是一个包含3个元素的数组,每个元素本身又是一个包含4个整数的数组。

        在声明二维数组的同时,还可以对二维数组进行初始化。初始化时,可以按照维度直接给出所有元素的值,形式如下。值得注意的是,如果省略某些值,默认它们会被设置为0。

int paNumber[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}
};

        访问二维数组中的某个元素,可以通过两个连续的下标运算符[]实现,其语法格式如下:

                arrayName[index1][index2];

        其中,index1和index2是从0开始计数的位置索引,index1不能大于size1,index2不能大于size2。比如:有一个名为paNumber的整型数组,想要获取第二行第三列元素的值,可以写作paNumber[1][2]。

动态分配

        有时候,我们需要根据程序运行时的变量值动态创建多维数组,而不是在编译时就确定其大小。此时,可以使用指针和new来实现。

        在下面的示例代码中,这段代码首先创建了一个指向指针数组的指针ppMatrix(即二维数组),然后为每一行分配了足够的内存空间来存储列元素。

int nRows = 3;
int nCols = 4;
// 创建行指针数组
int** ppMatrix = new int*[nRows];
for(int i = 0; i < nRows; ++i)
{// 为每一行分配空间ppMatrix[i] = new int[nCols];
}

        需要注意的是,动态分配内存后,我们必须释放这些资源,以防止内存泄漏。

for(int i = 0; i < nRows; ++i)
{// 释放每一行的内存delete[] ppMatrix[i];ppMatrix[i] = NULL;
}// 最后释放行指针数组的内存
delete[] ppMatrix;
ppMatrix = NULL;

http://www.dtcms.com/a/277255.html

相关文章:

  • vue3 el-select默认选中
  • Java_Springboot技术框架讲解部分(二)
  • 【Linux内核模块】模块加载函数--从启动到运行的幕后推手
  • MySQL 分表功能应用场景实现全方位详解与示例
  • 算法学习笔记:19.牛顿迭代法——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • 先“跨栏”再上车 公交站台装70厘米高护栏 公司回应
  • Mock 数据的生成与使用全景详解
  • 知识蒸馏:模型压缩与知识迁移的核心引擎
  • 通过同态加密实现可编程隐私和链上合规
  • GraphRAG:融合知识图谱与RAG的下一代信息检索框架
  • 【RK3568 平台I2C协议与AGS10驱动开发】
  • 深度学习16(对抗生成网络:GAN+自动编码器)
  • Vue单文件组件与脚手架工程化开发
  • 【数据结构】图 ,拓扑排序 未完
  • 弹性布局详解
  • mmap映射文件
  • 【设计模式】命令模式 (动作(Action)模式或事务(Transaction)模式)宏命令
  • 【STM32实践篇】:F407 时钟系统
  • fiddler/charles https配置完毕依然无法抓取APP https请求的解决办法
  • h() 函数
  • 【RA-Eco-RA6E2-64PIN-V1.0 开发板】ADC 电压的 LabVIEW 数据采集
  • Excel的学习
  • 如何选择合适的AI论文写作工具?七个AI英文论文写作网站
  • leetGPU解题笔记(2)
  • Agent浏览器自动化工具技术原理探析- Palywright VS OS-Atlas
  • 009_API参考与接口规范
  • Android 代码热度统计(概述)
  • Ampace厦门新能安科技Verify 测评演绎数字推理及四色测评考点分析、SHL真题题库
  • 代码随想录算法训练营第三十二天|动态规划理论基础、LeetCode 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • 嵌入式单片机开发 - HAL 库引入(HAL 库概述、HAL 库下载)