Така че нека започнем с разликите между масива с едно измерение и масива с две измерения, заедно с таблица за сравнение.
Сравнителна таблица:
Основа за сравнение | Едномерна | Двуизмерен |
---|---|---|
Основен | Съхранявайте един списък от елементи с подобен тип данни. | Съхранявайте „списък от списъци“ или „масив от масиви“ или „масив от едномерни масиви“. |
декларация | / * декларация в C ++ напишете променливото име [размер]; * / / * декларация в Java тип променлива_име []; variable_name = нов тип [размер]; * / | / * декларация в C ++ тип variable_name [size1] [size2]; * / / * декларация в Java напишете variable_name = new int [size1] [size2]; * / |
Алтернативна декларация | / * В Java int [] a = new int [10]; * / | / * В Java int [] [] a = new int [10] [20]; * / |
Общ размер в байтове | Общо Bytes = sizeof (тип данни за променливата на масива) * размер на масива. | Общо Bytes = sizeof (тип данни на променливата на масива) * размер на първия индекс * размер на втория индекс. |
Получаващ параметър | Тя може да бъде получена в указател, масив с размер или в неразреден масив. | Приемането на параметър трябва да дефинира най-дясното измерение на масив. |
Размери | Едномерно. | Двумерно. |
Определение на едномерния масив (1-D масив)
Едноизмерният или едномерният масив се счита за "списък с променливи с подобни типове данни", като всяка променлива може да бъде забелязана ясно, като посочи своя индекс в квадратни скоби, предшествани от името на този масив.
Да обсъдим в C ++ контекста
// деклариране в C ++ тип variable_name [size];
Тук типът декларира типа данни на променливата на масива, а размерът определя броя на елемента, който масивът ще държи.
Например, ако искаме да декларираме масив, който ще съдържа баланса на всеки месец от годината.
// например int month_balance [12];
Month_balance е променливата на масива, която ще съдържа 12 числа, които ще представят баланса на всеки месец. Сега, ако искаме да получим достъп до баланса на месец април, просто трябва да споменем името на променливата, последвано от квадратна скоба, съдържаща стойността на индекса за месец април, т.е. „month_balance [3]“. Но като „април“ е четвъртият месец от годината, но ние споменахме „[3]“, защото всички масиви имат 0 като индекс на първия им елемент.
В Java това може да се направи както
// деклариране в Java тип variable_name []; variable_name = нов тип [размер];
Тук първоначално бяхме декларирали масивна променлива с нейния тип и след това имахме разпределена памет към нея като използваме 'new' и присвояваме 'new' към декларираната променлива на масива. Да вземем по-горе пример, ако искаме да декларираме масив, който да съдържа баланса във всеки месец от годината.
// например int month_balance []; month_balance = new int [12];
Тук 'new' разпределя паметта за променливата на масива “month_balance”, така че сега mont_balance ще задържи паметта за 12 цели числа.
Масивите могат да бъдат инициализирани, когато са декларирани. Инициализаторът на масив е списъкът със стойности, разделени със запетая, заобиколен от фигурни скоби.
// например
int month_balance = {100, 500, 200, 750, 850, 250, 630, 248, 790, 360, 450, 180};
Дефиниция на двуизмерния масив (2-D масив)
Както C ++, така и Java поддържат многомерни масиви. Една от най-простите форми на многомерен масив е двуизмерен масив или 2-D масив. Двумерният масив може да се разглежда като "масив от масиви" или "масив от едномерни масиви". За да декларираме двуизмерната масивна променлива, трябва да посочим името на масива, последвано от две квадратни скоби, където вторият индекс е вторият набор от квадратни скоби.
Двуизмерен масив се съхранява под формата на матрица на колона-колона, където първият индекс показва реда, а вторият индекс показва колоната. Вторият или най-десният индекс на масив се променя много бързо в сравнение с първия или най-левия индекс при достъп до елементите на масив.
// деклариране в C ++ тип variable_name [size1] [size2];
Например, ние искаме да съхраняваме салдото на всеки 30 дни във всеки месец от годината, в 2-D масив.
// например int month_balance [12] [30];
В Java двуизмерният масив се получава от
// декларация в Java тип variable_name = new int [size1] [size2]; // например int month_balance = new int [12] [30];
Тъй като не можем да прехвърлим целия масив като параметър към функция, се предава указател към първия елемент от масива. Аргументът, получаващ двуизмерния масив, трябва да дефинира това най-дясно измерение. Най-дясното измерение е необходимо, защото компилаторът се нуждае от него, за да потвърди дължината на всеки ред, ако иска да индексира масива правилно. Ако не е споменат най-десният индекс, компилаторът не може да определи къде започва следващият ред.
// пример в Java void receiveing_funct (int a [] [10]) {., , }
Когато паметта се разпределя динамично към двуизмерния масив в Java, се посочва най-левият индекс, а останалите размери могат да се разпределят поотделно, т.е. всички редове на масива може да не са с еднакъв размер.
// пример в Java int month_balance = new int [12] []; month_balance [0] = нов int [31]; month_balance [1] = new int [28]; month_balance [2] = нов int [31]; month_balance [3] = нов int [30]; month_balance [4] = нов int [31]; month_balance [5] = нов int [30]; month_balance [6] = нов int [31]; month_balance [7] = нов int [30]; month_balance [8] = нов int [31]; month_balance [9] = нов int [30]; month_balance [10] = new int [31]; month_balance [11] = нов int [30]; month_balance [12] = нов int [31];
Но това не е предимство.
Ключови разлики между едномерни и двумерни масиви
- Едномерният масив е списък, чиито елементи са с подобен тип данни. От друга страна, двуизмерният масив е списък, чиито елементи са масив с подобен тип данни.
- В C ++, когато едномерният масив е получен от параметъра на получаващата функция, не е необходимо да се споменава размерът на масива, тъй като компилаторът разбира, че масивът от типа (споменатият тип данни заедно с параметър) с известна дължина трябва да се получи. В двуизмерен масив вторият или десният индекс трябва да бъде посочен, тъй като компилаторът трябва да знае къде завършва един ред и започва нов ред.
- В C ++ едномерният масив се съхранява в съседна памет в индексирания ред, докато двуизмерният масив също се съхранява в съседна памет, но тъй като има множество редове в двуизмерен масив, съхранението на първият ред е последван от втори и трети и така нататък.
Забележка:
Преминаването както на едномерния масив, така и на двуизмерния масив към функция е сходно, т.е. и двете се предават само от името на масива
// пример пропускане_име (name_of_array);
Заключение:
В И едномерен и двуизмерен масив, индексът играе много важна роля, защото това е единственото нещо, което конкретно идентифицира елемент в масива. Едномерният и двуизмерният масив могат да бъдат инициализирани по време на декларирането им.