logo

C++ vícerozměrné pole

Pole je typ datové struktury, který se používá k uložení kolekce položek stejného typu dat uložených v souvislých paměťových místech. Pole mohou být jednorozměrná nebo vícerozměrná na základě počtu směrů, ve kterých může pole růst. V tomto článku budeme studovat vícerozměrná pole, jako jsou dvourozměrná pole a trojrozměrná pole.

Co je vícerozměrné pole v C++?

Vícerozměrné pole je pole s více než jednou dimenzí. Je to homogenní kolekce položek, kde se ke každému prvku přistupuje pomocí více indexů.



Deklarace vícerozměrného pole

  datatype     arrayName    [    size1][size2]...[sizeN];>

kde,

  • datový typ: Typ dat, která mají být uložena v poli.
  • název pole: Název pole.
  • velikost1, velikost2,…, velikostN: Velikost každého rozměru.

Příklad:

Two dimensional array: int two_d[2][4]; Three dimensional array: int three_d[2][4][8];>

Velikost vícerozměrného pole

Velikost pole se rovná velikosti datového typu vynásobené celkovým počtem prvků, které lze do pole uložit. Celkový počet prvků v poli můžeme vypočítat vynásobením velikosti každého rozměru vícerozměrného pole.



Například:

int arr1[2][4];>
  • Pole int arr1[2][4] lze uložit celkem (2*4) = 8 Prvky.
  • V C++ datový typ int zabírá 4 bajty a v poli máme 8 prvků 'arr1' typu int.
  • Celková velikost = 4*8 = 32 bajtů .
int arr2[2][4][8];>
  • Pole int arr2[2][4][8] lze uložit celkem (2*4*8) = 64 prvků.
  • Celková velikost „ arr2 ' = 64 * 4 = 256 bajtů .

K ověření výše uvedeného výpočtu můžeme použít velikost() metoda k nalezení velikosti pole.

C++






// C++ program to verify the size of multidimensional> // arrays> #include> using> namespace> std;> > int> main()> {> >// creating 2d and 3d array> >int> arr1[2][4];> >int> arr2[2][4][8];> > >// using sizeof() operator to get the size of the above> >// arrays> >cout <<>'Size of array arr1: '> <<>sizeof>(arr1)> ><<>' bytes'> << endl;> >cout <<>'Size of array arr2: '> <<>sizeof>(arr2)> ><<>' bytes'>;> > >return> 0;> }>

>

>

Výstup

Size of array arr1: 32 bytes Size of array arr2: 256 bytes>

Nejpoužívanější vícerozměrná pole jsou:

  • Dvourozměrné pole
  • Trojrozměrné pole

Dvourozměrné pole (nebo 2D pole)

Dvourozměrné pole v C++ je kolekce prvků uspořádaných do řádků a sloupců. Lze jej zobrazit jako tabulku nebo mřížku, kde se ke každému prvku přistupuje pomocí dvou indexů: jeden pro řádek a jeden pro sloupec. Stejně jako jednorozměrné pole se indexy dvourozměrného pole také pohybují od 0 do n-1 pro řádky i sloupce.

dvourozměrná organizace pole v c++

Syntaxe 2D pole

datový_typ název_pole[ n ][ m ];

Kde,

  • n: Počet řádků.
  • m: Počet sloupců.

2D pole můžeme deklarovat staticky i dynamicky. Ve statické deklaraci je paměť alokována během kompilace a v dynamické paměti je alokována během běhu. Výše uvedené je syntaxe pro statickou deklaraci 2D pole. Chcete-li vědět, jak dynamicky deklarovat 2d pole, viz tento článek.

programovací vzory java

Inicializace dvourozměrných polí v C++

Různé způsoby inicializace 2D pole jsou uvedeny níže:

  • Použití seznamu inicializátorů
  • Použití smyček

1. Inicializujte 2D pole pomocí seznamu Initializer

2D pole můžeme inicializovat pomocí seznamu inicializátoru dvěma způsoby. Níže je uveden první způsob inicializace 2D pole pomocí seznamu inicializátorů.

První metoda: Níže uvedené pole má 2 řádky a 4 sloupce. Prvky se vyplňují tak, že první 4 prvky se vyplňují v prvním řádku a další 4 prvky ve druhém řádku.

int arr[2][4] = {0, 1, 2, 3, 4, 5, 6, 7};>

Druhá metoda: Níže uvedený způsob je čistší způsob, jak inicializovat 2D pole, vnořený seznam představuje prvky v řadě a počet prvků v něm se rovná počtu sloupců ve 2D poli. Počet vnořených seznamů představuje počet sloupců.

int x[2][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}};>

2. Inicializace 2D pole pomocí Loops

2D pole můžeme také inicializovat pomocí smyček. Pro inicializaci 2D pole musíme použít dvě vnořené smyčky a vnořené smyčky se rovnají rozměru. Například pro inicializaci 3D pole musíme použít tři vnořené smyčky. Podívejme se na příklad.

Příklad: V níže uvedeném příkladu jsme inicializovali 2D pole s 1. Vnější smyčka se používá ke sledování řádků i=0 znamená první řádek kvůli indexování 0 podobně j=0 znamená první sloupec a kombinaci tohoto x [0][0] představuje první buňku 2D pole.

int x[2][4]; for(int i = 0; i <2; i++){  for(int j = 0; j <4; j++){  x[i][j] = 1;  } }>

Přístup k prvkům dvourozměrných polí v C++

K prvkům 2-rozměrného pole můžeme přistupovat pomocí řádkových a sloupcových indexů. Je to podobné pozici prvku matice, ale jediný rozdíl je v tom, že zde indexování začíná od 0.

Syntax:

array_name[i][j];>

kde,

  • já: Index řádku.
  • j: Index sloupce.

Příklad: Níže je uveden rejstřík prvků druhého řádku a třetího sloupce.

int x[1][2];>

Pochopme to pomocí kódu tiskem prvků 2D pole.

Příklad 2D Array

C++




// c++ program to illustrate the two dimensional array> #include> using> namespace> std;> > int> main()> {> > >int> count = 1;> > >// Declaring 2D array> >int> array1[3][4];> > >// Initialize 2D array using loop> >for> (>int> i = 0; i <3; i++) {> >for> (>int> j = 0; j <4; j++) {> >array1[i][j] = count;> >count++;> >}> >}> > >// Printing the element of 2D array> >for> (>int> i = 0; i <3; i++) {> >for> (>int> j = 0; j <4; j++) {> >cout << array1[i][j] <<>;> >}> >cout << endl;> >}> > >return> 0;> }>

>

>

Výstup

1 2 3 4 5 6 7 8 9 10 11 12>

Vysvětlení: Ve výše uvedeném kódu jsme inicializovali počet pomocí ‚1‘ a deklarovali 2D pole se 3 řádky a 4 sloupci, poté jsme pole inicializovali s hodnotou počtu a přírůstkem hodnoty počtu v každé iteraci cyklu. Poté tiskneme 2D pole pomocí vnořené smyčky a na níže uvedeném výstupu vidíme, že existují 3 řádky a 4 sloupce.

Časová náročnost: O(n*m)
Prostorová složitost: O(n*m)

kde n je počet řádků a m je počet sloupců.

Trojrozměrné pole v C++

3D pole je datová struktura, která ukládá prvky do trojrozměrné struktury podobné kvádru. Lze jej vizualizovat jako sbírku více dvourozměrných polí naskládaných na sebe. Každý prvek v 3D poli je identifikován svými třemi indexy: indexem řádku, indexem sloupce a indexem hloubky.

trojrozměrná organizace pole v c++

Deklarace trojrozměrného pole v C++

Abychom deklarovali 3D pole v C++, musíme zadat jeho třetí rozměr spolu s 2D rozměry.

Syntax:

dataType arrayName[d][r];>
  • datový typ: Typ dat, která mají být uložena v každém prvku.
  • název pole: Název pole
  • d: Počet 2D polí nebo Hloubka pole.
  • r: Počet řádků v každém 2D poli.
  • C: Počet sloupců v každém 2D poli.

Příklad:

int array[3][5][2];>

Inicializace trojrozměrného pole v C++

K inicializaci 3D pole v C++ použijeme stejné metody, jaké jsme použili k inicializaci 2D pole. Ve 3D poli máme ještě jeden rozměr, takže musíme přidat ještě jeden vnořený seznam prvků.

3D pole v C lze inicializovat pomocí:

  1. Seznam inicializátorů
  2. Smyčky

Inicializace 3D Array pomocí seznamu inicializátorů

Metoda 1: V této metodě musíme zapsat celkový počet prvků do složených závorek a každý prvek je umístěn na svou pozici podle daného rozměru.

int x[3][5][2] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,   10, 11, 12, 13, 14, 15, 16, 17, 18, 19,  20, 21, 22, 23, 24, 25, 26, 27, 28, 30};>

Metoda 2 (lepší) : V této metodě jsme rozdělili prvky pomocí vnořených seznamů a je snadno čitelná.

int x[3][5][2] =   {      {   {0, 1}, {2, 3}, {4, 5}, {6, 7}, {8, 9}   }  ,     {   {10, 11}, {12, 13}, {14, 15}, {16, 17}, {18, 19}   }  ,    {   {20, 21}, {22, 23}, {24, 25}, {26, 27}, {28, 30}   }  ,    }  ;>

Inicializace 3D Array pomocí smyček

Tato metoda je stejná jako inicializace 2D pole pomocí smyček s ještě jednou vnořenou smyčkou pro třetí rozměr.

int x[3][5][2]; for (int i = 0; i <3; i++) {  for (int j = 0; j <5; j++) {  for (int k = 0; k <2; k++) {  x[i][j][k] =   (some_value)  ;  }  } }>

Přístup k prvkům v trojrozměrném poli v C++

Přístup k prvkům ve 3D polích je stejně jednoduchý jako přístup k prvkům ve 2D polích. Zde musíme udělat práci navíc je přidání jedné další vnořené smyčky, abychom mohli sledovat třetí dimenzi.

C++


java a swing



// C++ program to illustrate the 3d array> #include> using> namespace> std;> > int> main()> {> > >int> count = 0;> >// declaring 3d array> >int> x[2][2][3];> > >// initializing the array> >for> (>int> i = 0; i <2; i++) {> >for> (>int> j = 0; j <2; j++) {> >for> (>int> k = 0; k <3; k++) {> >x[i][j][k] = count;> >count++;> >}> >}> >}> > >// printing the array> >for> (>int> i = 0; i <2; i++) {> >for> (>int> j = 0; j <2; j++) {> >for> (>int> k = 0; k <3; k++) {> >printf>(>'x[%d][%d][%d] = %d '>, i, j, k,> >x[i][j][k]);> >count++;> >}> >}> >}> > >return> 0;> }>

>

>

Výstup

x[0][0][0] = 0 x[0][0][1] = 1 x[0][0][2] = 2 x[0][1][0] = 3 x[0][1][1] = 4 x[0][1][2] = 5 x[1][0][0] = 6 x[1][0][1] = 7 x[1][0][2] = 8 x[1][1][0] = 9 x[1][1][1] = 10 x[1][1][2] = 11>

Vysvětlení: Ve výše uvedeném kódu jsme inicializovali 3D pole pomocí smyčky, jak je vysvětleno výše, s číslem od 0 do 7 pomocí proměnné počet a poté přistupujeme k prvkům pomocí stejné smyčky, která se používá pro inicializaci 3D pole. Jediný rozdíl je v tom, že místo přiřazení prvku na konkrétní pozici řekněme x[0][0][1]=1 tiskneme prvek uložený na tomto místě, jak je vidět na níže uvedeném výstupu.