Разница между многомерным массивом в C ++ и Java

Опубликовано: 30 Ноября, 2021

Предварительные требования: многомерный массив в C ++, многомерный массив в Java.

Многомерные массивы :

Многомерные массивы - это табличное представление массивов для хранения нескольких элементов. Эти измерения могут быть одномерными массивами, двухмерными массивами и т. Д. Многомерные массивы доступны как в C ++, так и в Java, но их реализация и некоторые свойства отличаются.

Реализация на C / C ++ :

В C ++ многомерный массив создается внутри как гигантский линейный массив. Синтаксис C ++ абстрагирует этот линейный блок памяти до 2- или 3-мерного поведения, что упрощает работу программиста.

Примеры:

Двумерный массив размером 2 строки x 3 столбца {{9, 45, 51}, {5, 25, 6}} реализуется следующим образом (предполагая, что целое число занимает 4 байта):

Следовательно, внутренняя формула для внутреннего элемента с определенным индексом задается как:

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

Предположим, что базовый адрес равен 3000 . Тогда arr [1] [1] = 3000 + (1 * 3 * 4) + 1 * 4 = 3000 + 12 + 4 = 3016 .

Из-за такой реализации количество столбцов должно быть одинаковым для каждой строки, и обязательно указать размер столбца при объявлении для правильного доступа к элементам.

Ниже представлена реализация многомерного массива на C ++:

C ++

// C++ program for multidimention array
// implementation
#include <iostream>
using namespace std;
// Driver Code
int main()
{
// Create a 2d integer array,
// dimensions: 3rows X 5cols
int arr[3][5] = {
{ 23, 56, 34, 52, 63 },
{ 40, 20, 96, 43, 97 },
{ 75, 51, 10, 82, 43 }
};
// Traversing of 2D array
cout << "Printing entire 2d array: "
<< endl;
// Iterate over the rows
for ( int i = 0; i < 3; i++) {
// Iterate over the cols
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      
обр [1] [0]: 40 обр [1] [1]: 20 обр [1] [2]: 96 обр [1] [3]: 43 обр [1] [4]: 97      
обр [2] [0]: 75 обр [2] [1]: 51 обр [2] [2]: 10 обр [2] [3]: 82 обр [2] [4]: 43

Реализация на Java :

В Java многомерный массив реализован как массив массивов, где каждый индекс базового массива относится к совершенно другому массиву. Итак, arr [rowIndex] возвращает весь одномерный массив, а arr [rowIndex] [coLIndex] возвращает элемент с индексом coLIndex в этом одномерном массиве.

Примеры:

A 2D array of dimensions 3 rows x 5 cols is implemented as follows:

Because of this structure, It is possible to have 2D arrays with different column sizes (even null values) in Java.

Ниже представлена реализация многомерного массива на Java:

Ява

// Java program for multidimensional
// array implementation
import java.io.*;
class GFG {
// Driver Code
public static void main(String[] args)
{
// Create a 2D integer array
// dimensions: 3rows X 5cols
int [][] arr = {
{ 23 , 56 , 34 , 52 , 63 },
{ 40 , 20 , 96 , 43 , 97 },
{ 75 , 51 , 10 , 82 , 43 }
};
// Traversing the 2D array
System.out.println( "Printing entire 2d array: " );
// Iterate over the rows
for ( int i = 0 ;
i < arr.length; i++) {
// Iterate over the cols
for ( int j = 0 ;
j < arr[i].length; j++) {
System.out.print(
"arr[" + i + "][" + j
+ "]:" + arr[i][j]
+ " " );
}
System.out.println();
}
System.out.println();
// Reassigning arr[2] to another
// array
// This is not possible in 2D
// arrays in C++, instead of
// there is array of pointers
arr[ 2 ] = new int [] { 82 , 53 , 64 ,
12 , 45 , 3 };
// Traversing the array again
System.out.println(
"Printing entire 2d array "
+ "afer modification: " );
// Iterate over the rows
for ( int i = 0 ;
i < arr.length; i++) {
// Iterate over the cols
for ( int j = 0 ;
j < arr[i].length; j++) {
System.out.print(
"arr[" + i + "][" + j
+ "]:" + arr[i][j]
+ " " );
}
System.out.println();
}
}
}
Выход:
Печать всего 2d-массива: 
arr [0] [0]: 23 arr [0] [1]: 56 arr [0] [2]: 34 arr [0] [3]: 52 arr [0] [4]: 63    
обр [1] [0]: 40 обр [1] [1]: 20 обр [1] [2]: 96 обр [1] [3]: 43 обр [1] [4]: 97    
обр [2] [0]: 75 обр [2] [1]: 51 обр [2] [2]: 10 обр [2] [3]: 82 обр [2] [4]: 43    

Печать всего 2-го массива после модификации: 
arr [0] [0]: 23 arr [0] [1]: 56 arr [0] [2]: 34 arr [0] [3]: 52 arr [0] [4]: 63    
обр [1] [0]: 40 обр [1] [1]: 20 обр [1] [2]: 96 обр [1] [3]: 43 обр [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
Хотите учиться на лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для языка и STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .