首页 > 编程语言 >C++中的 多维数组、锯齿数组

C++中的 多维数组、锯齿数组

时间:2025-01-05 13:43:57浏览次数:1  
标签:int 元素 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;
}

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

相关文章

  • C++函数的出参
    在C#中,在函数或方法的参数前添加上out或ref时,这个参数就是出参了。在C++中主要是通过指针和引用实现来类似的功能。#include<iostream>//使用指针作为出参//getValues接受两个指向整数的指针,并通过这些指针修改了调用者提供的变量的值voidgetValues(int*a,int*b)......
  • C/C++调试---堆数据结构
    堆数据结构因为C/C++语言赋予程序员通过引用和指针来操纵内存对象的最大自由,所以毫不奇怪的是这些程序中的大多数bug都与错误的内存访问有关。根据错误发生的位置是栈还是堆,内存错误可分为两种:栈错误和堆错误。栈栈是分配给给一个独立的控制流(线程)的来纳许内存区域,用......
  • C/C++调试---调试符号与调试器
    调试符号与调试器调试符号调试符号由编译器生成,与相关的机器代码、全局数据对象等一同产生。链接器会收集并组织这些符号,将他们写入可执行文件的调试部分,或存储到一个单独文件中。概览全局函数和变量源文件和行信息为了优化程序性能,编译器可能会对源代码进行位移,情......
  • 【C语言】数组——二分查找
    题1704.二分查找【简单】intsearch(int*nums,intnumsSize,inttarget){intleft=0,right=numsSize-1;intmid=(left+right)/2;intresult=-1;while(left<=right){if(nums[mid]==target){r......
  • 【最新原创毕设】基于SpringBoot的企业综合业务审批管理系+37708(免费领源码)可做计算机
    目 录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2 企业综合业务审批管理系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3法律可行性分析2.2功能需求分析2.2.1功能性分析2.2.2非功能性......
  • C++Primer 变量
    欢迎阅读我的【C++Primer】专栏专栏简介:本专栏主要面向C++初学者,解释C++的一些基本概念和基础语言特性,涉及C++标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级程序设计技术。希望对读者有帮助!目录2.2变量变量......
  • 蓝桥杯2020年省赛C/C++B组第2题 既约分数
    解题思路:本题关键是掌握求最大公约数的方法——辗转相除法,其次就是注意如何减少遍历次数,我们不需要进行完全枚举,因为既然是既约分数,它本身的分子和分母倒过来组成的新的数也是既约分数,我们只需要统计一边即可,将统计完的的结果×2-1便是最终结果(因为1/1倒过来一样,所以要减去这......
  • 【C++】穿越时光隧道,拾贝史海遗珍,轻启C++入门之钥,解锁程序之奥秘(首卷)
    文章目录一、C++的发展历史1.发展历史2.版本更新3.学习C++时的资料查找链接二、C++的第一个程序三、命名空间1.命名空间的价值2.命名空间的定义与特性总结3.命名空间的使用方式指定命名空间域访问使用using将命名空间中某个成员展开使用using展开命名空间中全部成员4......
  • Effective C++读书笔记——item8(析构函数与异常)
    析构函数引发异常的问题异常同时存在的隐患:C++虽未禁止在析构函数中引发异常,但坚决阻止这样做。以std::vector等容器包含对象为例,当容器析构时要析构其中元素,若在析构元素(如Widget类对象)过程中连续抛出异常,出现两个或多个活动异常时,程序可能会终止或者出现未定义行为,使用其......
  • LeetCode算法题 (二叉树的直径)Day11!!!C/C++
    https://leetcode.cn/problems/diameter-of-binary-tree/description/一、题目描述给你一棵二叉树的根节点,返回该树的 直径 。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。两节点之间路径的 长度 由它......