C++和Java中的多维数组的区别

C++和Java中的多维数组的区别

先决条件: C++中的多维数组,Java中的多维数组

多维数组:

多维数组是数组的表格表示形式,用于存储多个元素。这些维度可以是1D数组、2D数组等。多维数组在C++和Java中都可以使用,但其实现和一些属性是不同的。

C/C++中的实现:

在C++中,多维数组在内部被创建为一个巨大的线性数组。C++的语法将这个线性的内存块抽象成2维或3维的行为,从而使程序员更容易理解。

示例:

一个2行3列的 2D数组 {{9,45,51},{5,25,6}}的实现如下(假设整数占4个字节):

C++和Java中的多维数组的区别

因此,特定索引的内部元素的内部公式为:

arr[rowIndex][colIndex] = arr + (rowIndex * noOfCols * sizeOfDataType) + coLIndex * sizeOfDataType

假设基地址为 3000 。那么 arr[1][1]= 3000+(1*3*4)+1*4*=3016

由于这种实现方式,每一行的列数必须相等,在声明时必须指定列的大小,以便正确访问元素。

以下是C++中多维数组的实现:

//C++程序的多维数组实现
#include <iostream>
using namespace std;

//驱动程序
int main()
{
    //创建一个二维整数数组,维度:3行X5列
    int arr[3][5]={
        {23,56,34,52,63},
        {40,20,96,43,97},
        {75,51,10,82,43}
    };

    //遍历2D数组
    cout <<"打印整个2d数组:" << endl;

    //遍历行
    for(int i=0;i<3;i++){
        //遍历列
        for(int j=0;j<5;j++){
            cout <<"arr[" <<i<< "][" <<j
                <<"]:"<<arr[i][j]
                <<"       ";
        }
        cout <<endl;
    }

    return 0;
}  

输出:

打印整个2d数组: 
arr[0][0]:23      arr[0][1]:56      arr[0][2]:34      arr[0][3]:52      arr[0][4]:63      
arr[1][0]:40      arr[1][1]:20      arr[1][2]:96      arr[1][3]:43      arr[1][4]:97      
arr[2][0]:75      arr[2][1]:51      arr[2][2]:10      arr[2][3]:82      arr[2][4]:43

Java中的实现:

在Java中,多维数组被实现为数组的数组,其中基础数组的每个索引都指向一个完全不同的数组。因此, arr[rowIndex] 返回一个完整的单维数组, arr[rowIndex][coLIndex] 返回该单维数组中索引为 coLIndex 的元素。

示例:

维数为3行5列的 2D数组 的实现如下:

C++和Java中的多维数组的区别

由于这种结构,Java可以有具有 不同列大小(甚至是空值)的2D数组

C++和Java中的多维数组的区别

以下是Java中多维数组的实现:

// Java多维数组实现的示例程序
import java.io.*;
 
class GFG {
 
    // Driver代码
    public static void main(String[] args)
    {
 
        // 创建一个2D整数数组
        // 维度:3行x 5列
        int[][] arr = {
            {23, 56, 34, 52, 63},
            {40, 20, 96, 43, 97},
            {75, 51, 10, 82, 43}
        };
 
        // 遍历2D数组
        System.out.println("Printing entire 2d array: ");
 
        // 迭代每行
        for (int i = 0;
             i < arr.length; i++) {
 
            // 迭代每列
            for (int j = 0;
                 j < arr[i].length; j++) {
                System.out.print(
                    "arr[" + i + "][" + j
                    + "]:" + arr[i][j]
                    + "    ");
            }
            System.out.println();
        }
        System.out.println();
 
        // 将arr[2]重新分配给另一个数组
        // 在C ++中的2D数组中不可能这样做,而是指针数组
        arr[2] = new int[] {82, 53, 64,
                             12, 45, 3};
 
        // 再次遍历数组
        System.out.println(
            "Printing entire 2d array "
            + "after modification: ");
 
        // 迭代每行
        for (int i = 0;
             i < arr.length; i++) {
 
            // 迭代每列
            for (int j = 0;
                 j < arr[i].length; j++) {
 
                System.out.print(
                    "arr[" + i + "][" + j
                    + "]:" + arr[i][j]
                    + "    ");
            }
            System.out.println();
        }
    }
}  

输出

Printing entire 2d array: 
arr[0][0]:23    arr[0][1]:56    arr[0][2]:34    arr[0][3]:52    arr[0][4]:63    
arr[1][0]:40    arr[1][1]:20    arr[1][2]:96    arr[1][3]:43    arr[1][4]:97    
arr[2][0]:75    arr[2][1]:51    arr[2][2]:10    arr[2][3]:82    arr[2][4]:43    

Printing entire 2d array after modification: 
arr[0][0]:23    arr[0][1]:56    arr[0][2]:34    arr[0][3]:52    arr[0][4]:63    
arr[1][0]:40    arr[1][1]:20    arr[1][2]:96    arr[1][3]:43    arr[1][4]:97    
arr[2][0]:82    arr[2][1]:53    arr[2][2]:64    arr[2][3]:12    arr[2][4]:45    arr[2][5]:3    

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程