首页 > 其他分享 >多维数组、锯齿数组

多维数组、锯齿数组

时间:2025-01-03 14:22:58浏览次数:1  
标签:int 元素 value 锯齿 ++ 数组 多维

C++

多维数组

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

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

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

#include <iostream>
int main() {
    // 定义一个三维数组,大小为2x3x4
    int 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() {
        // 定义一个三维数组,大小为2x3x4
        int[,,] 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] = value
            value += 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] = value
        value += 1
# 访问并输出锯齿列表元素
for sublist in jaggedList:
    for value in sublist:
        print(value, end=' ')
    print()

标签:int,元素,value,锯齿,++,数组,多维
From: https://www.cnblogs.com/zeoHere/p/18650041

相关文章

  • [数据结构学习笔记3] 数组
    数组是用于存放一组数据,把这组数据存放在连续的空间里。通常有插入,删除,查找,访问等操作。举例:购物清单,初始状态:清单:牛奶->鸡蛋->奶油->火腿->果汁下标:0      1     2      3     4插入:1.插在末尾清单:牛奶->鸡蛋->奶......
  • 后缀数组学习笔记
    \(\text{后缀数组学习笔记}\)一、定义对于下标从\(1\)开始,长度为\(n\)的字符串\(s\),我们定义后缀\(i\)表示字符串\(s[i,n]\)。对于后缀数组,我们定义\(sa(i)\)表示所有后缀按字典序排序后第\(i\)小的后缀的编号。例如对于字符串aabaaab,它有\(7\)个后缀,下边我们......
  • 寻找两个正序数组的中位数(二分查找)
    给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log(m+n)) 。 示例1:输入:nums1=[1,3],nums2=[2]输出:2.00000解释:合并数组=[1,2,3],中位数2示例2:输入:nums1=[1......
  • 寻找旋转排序数组中的最小值(二分查找)
    已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums=[0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0],a[1],a[2],...,a[n-1......
  • js 两个数组合并后去重
    functionmergeUnique(arr1,arr2){return[...newSet([...arr1,...arr2])];}//示例使用constarray1=[1,2,3];constarray2=[2,3,4];constmergedArray=mergeUnique(array1,array2);console.log(mergedArray);//输出:[1,2,3,4]在这个例子中......
  • 请问JS中的数组和函数在内存中是如何存储的?
    在JavaScript中,数组和函数在内存中的存储方式主要涉及堆内存(HeapMemory)和栈内存(StackMemory)的使用。这两种数据结构在内存中有着不同的特性和用途。1.数组在内存中的存储数组在JavaScript中是一种特殊的对象,用于表示有序的元素集合。由于数组的大小是可变的,且其元素可以是任......
  • 使用js写一个方法判断给定的数组是一维还是多维
    在JavaScript中,你可以通过递归地检查数组中的每个元素来判断一个数组是一维还是多维。以下是一个示例函数,用于判断给定的数组是一维还是多维:functionisArrayDimensional(arr){//基础情况:如果数组为空,或者数组中的元素都不是数组,那么它是一维数组if(arr.length===......
  • 通过 Go 调试器dlv调试二维数组
    背景在Go语言的开发过程中,调试是一个重要环节,它能够帮助开发者更清晰地理解程序的执行过程,尤其是在处理复杂数据结构时。例如,二维数组常用于存储和操作具有行列结构的数据,而如何调试这些数据结构,以确保程序按预期工作,则是一个常见的开发挑战。在本例中,开发者使用Go语言的调......
  • 删除有序数组中的重复项 II
    小哆啦开始力扣每日一题的第三天80.删除有序数组中的重复项II-力扣(LeetCode)小哆啦的去重冒险:数字王国的挑战在数字王国中,每个数字都有自己的位置和秩序,大家都非常希望能有一个完美的队列,确保没有重复的数字。然而,随着时间的推移,越来越多的重复数字出现在队伍中,导致......
  • 超级树状数组
    超级树状数组,就是用树状数组来进行区间修改+区间查询操作的东西,好处是和线段树相比快了不少。例题首先先来复习一下普通的树状数组inttree[MAXN];intlowbit(intx){ returnx&-x;}voidupdate(intx,intd){ while(x<=n){ tree[x]+=d; x+=lowbit(x); ......