多维数组、锯齿数组

news/2025/1/5 16:55:14/文章来源:https://www.cnblogs.com/zeoHere/p/18650041

C++

多维数组

定义:多维数组可以看作是数组的数组,通过在定义时指定每个维度的大小来创建。下面以三维数组为例。

访问:使用多个索引来访问数组中的元素,索引从 0 开始。

销毁:对于栈上定义的多维数组,当作用域结束时会自动销毁;对于堆上动态分配的多维数组,需要手动释放内存。

#include <iostream>
int main() {// 定义一个三维数组,大小为2x3x4int multiDimArray[2][3][4];// 初始化三维数组元素int value = 0;for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {for (int k = 0; k < 4; k++) {multiDimArray[i][j][k] = value++;}}}// 访问并输出三维数组元素for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {for (int k = 0; k < 4; k++) {std::cout << "multiDimArray[" << i << "][" << j << "][" << k << "] = " << multiDimArray[i][j][k] << " ";}std::cout << std::endl;}std::cout << std::endl;}// 动态分配三维数组int*** dynamicMultiDimArray = new int** [2];for (int i = 0; i < 2; i++) {dynamicMultiDimArray[i] = new int* [3];for (int j = 0; j < 3; j++) {dynamicMultiDimArray[i][j] = new int[4];}}// 初始化动态分配的三维数组元素value = 0;for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {for (int k = 0; k < 4; k++) {dynamicMultiDimArray[i][j][k] = value++;}}}// 访问并输出动态分配的三维数组元素for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {for (int k = 0; k < 4; k++) {std::cout << "dynamicMultiDimArray[" << i << "][" << j << "][" << k << "] = " << dynamicMultiDimArray[i][j][k] << " ";}std::cout << std::endl;}std::cout << std::endl;}// 销毁动态分配的三维数组for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {delete[] dynamicMultiDimArray[i][j];}delete[] dynamicMultiDimArray[i];}delete[] dynamicMultiDimArray;return 0;
}

锯齿数组

在 C++ 中,锯齿数组即不规则的多维数组,每一行的长度可以不同

定义:通过动态分配内存来创建每一行,使每行具有不同的长度。

访问:通过行和列索引来访问元素,但要注意每行的长度不同。

销毁:手动释放每一行分配的内存,以及存储行指针的数组。

#include <iostream>
int main() {// 定义一个锯齿数组,有3行int** jaggedArray = new int* [3];// 第一行有2个元素,第二行有3个元素,第三行有4个元素jaggedArray[0] = new int[2];jaggedArray[1] = new int[3];jaggedArray[2] = new int[4];// 初始化锯齿数组元素int value = 0;for (int i = 0; i < 3; i++) {for (int j = 0; j < (i + 2); j++) {jaggedArray[i][j] = value++;}}// 访问并输出锯齿数组元素for (int i = 0; i < 3; i++) {for (int j = 0; j < (i + 2); j++) {std::cout << "jaggedArray[" << i << "][" << j << "] = " << jaggedArray[i][j] << " ";}std::cout << std::endl;}// 销毁锯齿数组for (int i = 0; i < 3; i++) {delete[] jaggedArray[i];}delete[] jaggedArray;return 0;
}

C#

多维数组

定义:使用new关键字和指定的维度大小来创建多维数组。

访问:通过多个索引访问数组元素,索引从 0 开始。

销毁:C# 有垃圾回收机制,当多维数组不再被引用时,垃圾回收器会自动回收其占用的内存。

using System;
class Program {static void Main() {// 定义一个三维数组,大小为2x3x4int[,,] multiDimArray = new int[2, 3, 4];// 初始化三维数组元素int value = 0;for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {for (int k = 0; k < 4; k++) {multiDimArray[i, j, k] = value++;}}}// 访问并输出三维数组元素for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {for (int k = 0; k < 4; k++) {Console.WriteLine($"multiDimArray[{i}, {j}, {k}] = {multiDimArray[i, j, k]}");}}}}
}

锯齿数组

定义:先定义一个一维数组来存储每行的数组引用,然后为每行分配不同大小的数组。

访问:通过行和列索引访问元素,注意每行长度不同。

销毁:C# 的垃圾回收机制会自动处理锯齿数组的内存回收。

using System;
class Program {static void Main() {// 定义一个锯齿数组,有3行int[][] jaggedArray = new int[3][];// 第一行有2个元素,第二行有3个元素,第三行有4个元素jaggedArray[0] = new int[2];jaggedArray[1] = new int[3];jaggedArray[2] = new int[4];// 初始化锯齿数组元素int value = 0;for (int i = 0; i < 3; i++) {for (int j = 0; j < (i + 2); j++) {jaggedArray[i][j] = value++;}}// 访问并输出锯齿数组元素for (int i = 0; i < 3; i++) {for (int j = 0; j < (i + 2); j++) {Console.WriteLine($"jaggedArray[{i}][{j}] = {jaggedArray[i][j]}");}}}
}

Python

多维列表(模拟多维数组)

定义:通过嵌套列表来创建多维列表。下面以三维列表为例。

访问:使用多个索引访问列表中的元素,索引从 0 开始。

销毁:Python 有垃圾回收机制,当多维列表不再被引用时,内存会被自动回收。

# 定义一个三维列表,大小为2x3x4
multiDimList = [[[0 for _ in range(4)] for _ in range(3)] for _ in range(2)]
# 初始化三维列表元素
value = 0
for i in range(2):for j in range(3):for k in range(4):multiDimList[i][j][k] = valuevalue += 1
# 访问并输出三维列表元素
for sublist1 in multiDimList:for sublist2 in sublist1:for value in sublist2:print(value, end=' ')print()print()

锯齿列表(模拟锯齿数组)

定义:通过创建不同长度的子列表来模拟锯齿数组。

访问:使用行和列索引访问元素,注意每行长度不同。

销毁:Python 的垃圾回收机制会自动处理锯齿列表的内存回收。

# 定义一个锯齿列表,有3行
jaggedList = []
jaggedList.append([0] * 2)
jaggedList.append([0] * 3)
jaggedList.append([0] * 4)
# 初始化锯齿列表元素
value = 0
for i in range(len(jaggedList)):for j in range(len(jaggedList[i])):jaggedList[i][j] = valuevalue += 1
# 访问并输出锯齿列表元素
for sublist in jaggedList:for value in sublist:print(value, end=' ')print()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/863368.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中考英语优秀范文-006 How to get on well with others 如何与他人相处融洽

中考英语优秀范文-006 How to get on well with others 如何与他人相处融洽 1 写作要求 当今社会,与人交往越来越成为一种不可或缺的能力,作为中学生,学会如何与人相处尤为重要。假如上周你们班对 “如何与人相处” 展开了讨论,请根据以下的讨论结果,以 “How to get on …

SI24R2 超低功耗高性能 2.4GHz GFSK 无线发射芯片SI24R2重磅出击

SI24R2是一颗工作在2.4GHz ISM频段,专为低功耗无线场合设计,集成嵌入式发射基带的无线发射芯片。工作频率范围为2400MHz-2525MHz,共有126个1MHz带宽的信道。 SI24R2采用GFSK/FSK数字调制与解调技术。数据传输速率与PA输出功率都可以调节,支持2Mbps,1Mbps,250Kbps 三种数据…

揭秘如何用Monaco Editor打造功能强大的日志查看器

Monaco Editor 是一个基于浏览器的代码编辑器,由 Microsoft 开发,是 Visual Studio Code 的核心编辑器组件。为用户提供了一个功能丰富、性能优异的代码编辑环境,常用于 web 应用。 下面本文将从 Monaco Editor 的使用方法、使用逻辑作为切入点,讲述在网页中如何通过 Monac…

【新兴产业】人形机器人

产业链 人形机器人产业链上游为原材料、零部件以及软件平台,核心零部件包括伺服系统、执行器、减速器、控制系统、驱动器等,成本占比最高、技术难度大,具备较高的壁垒。 产业链中游为人形机器人的本体设计、制造及系统集成。 产业链下游为场景应用,目前较有潜力的人形机器人…

PVE 备份快照

PVE 备份快照 - 知乎 抄一个备份 vmware压缩整个虚拟机文件夹就可以连带快照一起打包。 PVE 自带的vzdump备份并不包含快照信息,备份之后再还原,会丢失快照信息。 备份时提示:snapshots found (not included into backup) 快照信息在循序渐进的开发模式中十分重要,遇到错误…

借助Atrribute扩展UnityEdior

借助Atrribute扩展UnityEdiorC# Attribute 简介 Attribute 是 C# 提供的一种强大的元数据机制,可以用来为代码的程序元素(如类、方法、属性等)附加额外的信息。这些附加信息可以在运行时通过反射机制读取,从而影响程序的行为。Attribute 的特性轻量级 Attribute 不会直接影…

C#实现LALR(1)解析器的生成器

Yet Another Compiler 参考lex和yacc的输入格式,参考虎书《现代编译原理-C语言描述》的算法,大力整合优化,实现了LALR(1)的C#生成器(暂命名为bitParser)。 词法分析器根据DFA和最小化DFA分别生成词法分析器代码(状态转换表、保留字、Token类型等)支持全Unicode字符。支持…

【新兴产业】量子信息

产业链 量子信息主要包括量子计算、量子通信和量子测量三大领域,在提升计算困难问题运算处理能力、加强信息安全保护能力、提高传感测量精度等方面,具备超越经典信息技术的潜力。 量子信息产业链从上游到下游主要包含基础光电元器件、量子通信 核心元器件、量子通信传输干线、…

【新兴产业】元宇宙

产业链 •顶层设计:政府从宏观角度为元宇宙的发展做出顶层设计,尤其在金融交易体系、社会治理制度方面给出明确定调和指明方向。 • 市场培育:地方政府因地制宜制定符合当地产业特色的元宇宙发展规划,并出台产业扶持政策、落地措施,制定未来执行计划。 • 产业联盟:建立与…

回首2024,展望2025,新年新“鲸”象~

回首 2024 年,数字孪生领域蓬勃发展,技术创新层出不穷,应用场景不断拓展。在这充满机遇与挑战的一年里,山海鲸可视化凭借国产自研的零代码数字孪生平台,为众多企业和政府机构提供了一站式的数字化解决方案,助力各行各业在数字化转型的道路上稳步前行。 1. 回首2024年 (一…

CICD Day2、基于jenkins Gitlab 的CICD web-demo配置

1、 代码提交 1.1 在服务器上创建一个web-demo的目录,用户web前端项目的开发目录 mkdir web-demo # 在web-demo目录下 编辑一个index.html的文件 cat index.html <!DOCTYPE html> <html> <head><meta charset="utf-8"><title>实例<…

CPU-Z处理器检测工具 v2.13.0中文绿色单文件

点击上方蓝字关注我 前言 CPU-Z是一个非常厉害的CPU检测小帮手。它能识别很多种类的CPU,而且打开和检测的速度都很快。这个工具能清楚地告诉我们关于CPU、主板、内存、显卡等硬件的详细信息,比如是哪个厂家生产的、处理器的名字、是怎么做出来的、封装技术怎么样,还有它们的…