logo

Matrices C++

En C++, una matriz es una estructura de datos que se utiliza para almacenar múltiples valores de tipos de datos similares en una ubicación de memoria contigua.

Por ejemplo , si tenemos que almacenar las calificaciones de 4 o 5 estudiantes, entonces podemos almacenarlas fácilmente creando 5 variables diferentes, pero ¿qué pasa si queremos almacenar las calificaciones de 100 estudiantes o digamos 500 estudiantes? Entonces se vuelve muy difícil crear esos números de variables. y gestionarlos. Ahora, entran en escena matrices que pueden hacerlo fácilmente simplemente creando una matriz del tamaño requerido.



Matrices en C++

Propiedades de las matrices en C++

  • Una matriz es una colección de datos del mismo tipo, almacenados en una ubicación de memoria contigua.
  • La indexación de una matriz comienza desde 0. Significa que el primer elemento se almacena en el índice 0, el segundo en el 1, y así sucesivamente.
  • Se puede acceder a los elementos de una matriz utilizando sus índices.
  • Una vez que se declara una matriz, su tamaño permanece constante durante todo el programa.
  • Una matriz puede tener varias dimensiones.
  • El tamaño de la matriz en bytes se puede determinar mediante el operador sizeof, mediante el cual también podemos encontrar el número de elementos de la matriz.
  • Podemos encontrar el tamaño del tipo de elementos almacenados en una matriz restando direcciones adyacentes.

Declaración de matriz en C++

En C++, podemos declarar una matriz simplemente especificando primero el tipo de datos y luego el nombre de una matriz con su tamaño.

data_type array_name[Size_of_array];>

Ejemplo



int arr[5];>

Aquí,

  • En t: Es el tipo de datos que se almacenarán en la matriz. También podemos utilizar otros tipos de datos como char, float y double.
  • llegar: Es el nombre de la matriz.
  • 5: Es el tamaño de la matriz, lo que significa que solo se pueden almacenar 5 elementos en la matriz.

declaración de matriz en c++

Inicialización de matriz en C++

En C++, podemos inicializar una matriz de muchas maneras, pero analizaremos algunas de las formas más comunes de inicializar una matriz. Podemos inicializar una matriz en el momento de la declaración o después de la declaración.



1. Inicializar matriz con valores en C++

Hemos inicializado la matriz con valores. Los valores encerrados entre llaves '{}' se asignan a la matriz. Aquí, 1 se almacena en arr[0], 2 en arr[1], y así sucesivamente. Aquí el tamaño de la matriz es 5.

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

2. Inicializar Array con Valores y sin Tamaño en C++

Hemos inicializado la matriz con valores pero no hemos declarado la longitud de la matriz, por lo tanto, la longitud de una matriz es igual al número de elementos dentro de llaves.

cadena concat de java
int arr[] = {1, 2, 3, 4, 5};>

3. Inicializar la matriz después de la declaración (usando bucles)

Hemos inicializado la matriz usando un bucle después de declarar la matriz. Este método se usa generalmente cuando queremos recibir información del usuario o no podemos asignar elementos uno por uno a cada índice de la matriz. Podemos modificar las condiciones del bucle o cambiar los valores de inicialización según los requisitos.

for (int i = 0; i   arr[i] = value; }>

4. Inicializar una matriz parcialmente en C++

Aquí, hemos declarado una matriz 'partialArray' con tamaño '5' y con valores '1' y '2' únicamente. Entonces, estos valores se almacenan en los dos primeros índices y en el resto de los índices se almacena '0'.

int partialArray[5] = {1, 2};>

5. Inicialice la matriz con cero en C++

Podemos inicializar la matriz con todos los elementos como '0' especificando '0' dentro de las llaves. Esto sucederá en caso de cero solo si intentamos inicializar la matriz con un valor diferente, digamos '2' usando este método, luego '2' se almacena solo en el índice 0.

int zero_array[5] = {0};>

Accediendo a un elemento de una matriz en C++

Se puede acceder a los elementos de una matriz especificando el nombre de la matriz y luego el índice del elemento encerrado en el operador de subíndice de la matriz []. Por ejemplo, llegada[i].

Ejemplo 1: el programa C++ para ilustrar cómo acceder a los elementos de la matriz

C++
// C++ Program to Illustrate How to Access Array Elements #include  using namespace std; int main() {  int arr[3];  // Inserting elements in an array  arr[0] = 10;  arr[1] = 20;  arr[2] = 30;  // Accessing and printing elements of the array  cout << 'arr[0]: ' << arr[0] << endl;  cout << 'arr[1]: ' << arr[1] << endl;  cout << 'arr[2]: ' << arr[2] << endl;  return 0; }>

Producción
arr[0]: 10 arr[1]: 20 arr[2]: 30>

Actualizar elemento de matriz

Para actualizar un elemento en una matriz, podemos usar el índice que queremos actualizar encerrado dentro del operador de subíndice de la matriz y asignar el nuevo valor.

arr[i] = new_value;>

Atravesar una matriz en C++

Podemos recorrer la matriz con la ayuda de un bucle. usando indexación en C++. Primero, hemos inicializado una matriz 'table_of_two' con un múltiplo de 2. Después de eso, ejecutamos un bucle for de 0 a 9 porque en una matriz la indexación comienza desde cero. Por lo tanto, utilizando los índices imprimimos todos los valores almacenados en una matriz.

Ejemplo 2: el programa C++ para ilustrar cómo atravesar una matriz

C++
// C++ Program to Illustrate How to Traverse an Array #include  using namespace std; int main() {  // Initialize the array  int table_of_two[10]  = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };  // Traverse the array using for loop  for (int i = 0; i < 10; i++) {  // Print the array elements using indexing  cout << table_of_two[i] << ' ';  }  return 0; }>

Producción
2 4 6 8 10 12 14 16 18 20>

Tamaño de una matriz en C++

En C++, no tenemos la función de longitud como en Java para encontrar el tamaño de la matriz, pero podemos calcular el tamaño de una matriz usando el operador sizeof() truco. Primero, encontramos el tamaño ocupado por toda la matriz en la memoria y luego lo dividimos por el tamaño del tipo de elemento almacenado en la matriz. Esto nos dará la cantidad de elementos almacenados en la matriz.

data_type size = sizeof(Array_name) / sizeof(Array_name[index]);>

Ejemplo 3: El programa C++ para ilustrar cómo encontrar el tamaño de una matriz

C++
// C++ Program to Illustrate How to Find the Size of an // Array #include  using namespace std; int main() {  int arr[] = { 1, 2, 3, 4, 5 };  // Size of one element of an array  cout << 'Size of arr[0]: ' << sizeof(arr[0]) << endl;  // Size of array 'arr'  cout << 'Size of arr: ' << sizeof(arr) << endl;  // Length of an array  int n = sizeof(arr) / sizeof(arr[0]);  cout << 'Length of an array: ' << n << endl;  return 0; }>

Producción
Size of arr[0]: 4 Size of arr: 20 Length of an array: 5>

Relación entre matrices y punteros en C++

En C++, las matrices y los punteros están estrechamente relacionados entre sí. El nombre de la matriz se trata como un puntero que almacena la dirección de memoria del primer elemento de la matriz. Como comentamos anteriormente, los elementos de una matriz se almacenan en ubicaciones de memoria contiguas, por eso podemos acceder a todos los elementos de una matriz utilizando el nombre de la matriz.

Ejemplo 4: ilustración de la relación entre matriz y punteros

C++
// C++ Program to Illustrate that Array Name is a Pointer // that Points to First Element of the Array #include  using namespace std; int main() {  // Defining an array  int arr[] = { 1, 2, 3, 4 };  // Define a pointer  int* ptr = arr;  // Printing address of the arrary using array name  cout << 'Memory address of arr: ' << &arr << endl;  // Printing address of the array using ptr  cout << 'Memory address of arr: ' << ptr << endl;  return 0; }>

Producción
Memory address of arr: 0x7fff2f2cabb0 Memory address of arr: 0x7fff2f2cabb0>

Explicación:

En el código anterior, primero definimos una matriz llegar y luego declarar un puntero ptr y asígnele la matriz arr. Podemos asignar arr a ptr porque arr también es un puntero. Después de eso, imprimimos la dirección de memoria de llegar usando el operador de referencia ( & ) y también imprimir la dirección almacenada en el puntero ptr y podemos ver arr y ptr, ambos almacenan la misma dirección de memoria.

Ejemplo 5: Impresión de elementos de matriz sin indexación en C++

Generalmente accedemos e imprimimos los elementos de la matriz mediante indexación. Por ejemplo para acceder al primer elemento utilizamos nombre_matriz[0]. Hemos comentado anteriormente que el nombre de la matriz es un puntero que almacena la dirección del primer elemento y que los elementos de la matriz se almacenan en ubicaciones contiguas. Ahora, accederemos a los elementos de una matriz usando únicamente el nombre de la matriz.

C++
// C++ Program to Print Array Elements without Indexing #include  using namespace std; int main() {  // Define an array  int arr[] = { 11, 22, 33, 44 };  // Print elements of an array  cout << 'first element: ' << *arr << endl;  cout << 'Second element: ' << *(arr + 1) << endl;  cout << 'Third element: ' << *(arr + 2) << endl;  cout << 'fourth element: ' << *(arr + 3) << endl;  return 0; }>

Producción
first element: 11 Second element: 22 Third element: 33 fourth element: 44>

Explicación

En el código anterior, primero declaramos una matriz llegar con cuatro elementos. Después de eso, imprimimos los elementos de la matriz. Analicemos cómo lo hacemos. Discutimos que el nombre de la matriz es un puntero que almacena la dirección del primer elemento de una matriz, por lo que para imprimir el primer elemento hemos desreferenciado ese puntero. (*arr) usando el operador de desreferenciación (*) que imprime los datos almacenados en esa dirección.

Para imprimir el segundo elemento de una matriz primero agregamos 1 a llegar lo cual es equivalente a (dirección de arr + tamaño_de_un_elemento *1) que lleva el puntero a la dirección justo después del primero y luego de eso, desreferenciamos ese puntero para imprimir el segundo elemento. De manera similar, imprimimos el resto de los elementos de una matriz sin utilizar indexación.

Pasar matriz para funcionar en C++

Para utilizar matrices de manera eficiente, debemos saber cómo pasar matrices para que funcionen. Podemos pasar matrices a funciones como argumento de la misma manera que pasamos variables a funciones, pero sabemos que el nombre de la matriz se trata como un puntero. Usando este concepto, podemos pasar la matriz a funciones como argumento y luego acceder a todos los elementos de esa matriz usando puntero.

Entonces, en última instancia, Las matrices siempre se pasan como punteros a la función. Veamos 3 formas de pasar una matriz a una función que se utilizan con mayor frecuencia.

1. Pasar una matriz como puntero

En este método, simplemente pasamos el nombre de la matriz en la llamada a la función, lo que significa que pasamos la dirección al primer elemento de la matriz. En este método, podemos modificar los elementos de la matriz dentro de la función.

Sintaxis

return_type   function_name   (   data_type *array_name   ) {     // set of statements  }>

2. Pasar una matriz como una matriz sin tamaño

En este método, la función acepta la matriz utilizando una declaración de matriz simple sin tamaño como argumento.

Sintaxis

return_type   function_name    ( data_type array_name[]   ) {    // set of statements  }>

3. Pasar una matriz como una matriz dimensionada

En este método, la función acepta la matriz utilizando una declaración de matriz simple con el tamaño como argumento. Usamos este método dimensionando una matriz solo para indicar el tamaño de una matriz.

Sintaxis

return_type function_name(data_type array_name[size_of_array]){  // set of statements }>

Nota: La matriz será tratada como un puntero en la función pasada sin importar qué método usemos. A medida que la matriz se pasa como punteros, perderán la información sobre su tamaño, lo que provocará un fenómeno denominado como Decaimiento de matriz.

Ejemplo: ilustración de diferentes formas de pasar matrices a una función

C++
#include  using namespace std; // passing array as a sized array argument void printArraySized(int arr[3], int n) {  cout << 'Array as Sized Array Argument: ';  for (int i = 0; i < n; i++) {  cout << arr[i] << ' ';  }  cout << endl; } // passing array as an unsized array argument void printArrayUnsized(int arr[], int n) {  cout << 'Array as Unsized Array Argument: ';  for (int i = 0; i < n; i++) {  cout << *(arr + i) << ' ';  }  cout << endl; } // Passing array as a pointer argument void printArrayPointer(int* ptr, int n) {  // Print array elements using pointer ptr  // that store the address of array passed  cout << 'Array as Pointer Argument: ';  for (int i = 0; i < n; i++) {  cout << ptr[i] << ' ';  } } // driver code int main() {  int arr[] = { 10, 20, 30 };  // Call function printArray and pass  // array and its size to it.  printArraySized(arr, 3);  printArrayUnsized(arr, 3);  printArrayPointer(arr, 3);  return 0; }>

Producción
Array as Sized Array Argument: 10 20 30 Array as Unsized Array Argument: 10 20 30 Array as Pointer Argument: 10 20 30>

Matrices multidimensionales en C++

Las matrices declaradas con más de una dimensión se denominan matrices multidimensionales. Los arreglos multidimensionales más utilizados son los arreglos 2D y los arreglos 3D. Estas matrices generalmente se representan en forma de filas y columnas.

Declaración de matriz multidimensional

Data_Type Array_Name[Size1][Size2]...[SizeN];>

dónde,

  • Tipo de datos: Tipo de datos que se almacenarán en la matriz.
  • Nombre_matriz: Nombre de la matriz.
  • Tamaño1, Tamaño2,…, TamañoN: Tamaño de cada dimensión.

Matriz bidimensional en C++

En C++, una matriz bidimensional es una agrupación de elementos dispuestos en filas y columnas. Se accede a cada elemento mediante dos índices: uno para la fila y otro para la columna, lo que facilita su visualización como una tabla o cuadrícula.

Sintaxis de matriz 2D

data_Type array_name[n][m];>

Dónde,

  • norte: Número de filas.
  • metro: Número de columnas.
    matriz bidimensional en c ++

Ejemplo: el programa C++ para ilustrar la matriz bidimensional

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

Producción
0 1 2 3 1 2 3 4 2 3 4 5 3 4 5 6>

Explicación

En el código anterior hemos declarado una matriz 2D con 4 filas y 4 columnas, luego inicializamos la matriz con el valor de (i+j) en cada iteración del ciclo. Luego, imprimimos la matriz 2D usando un bucle anidado y podemos ver en el siguiente resultado que hay 4 filas y 4 columnas.

Matriz tridimensional en C++

La matriz 3D utiliza tres dimensiones. Para representarlo se puede utilizar una colección de varias matrices bidimensionales apiladas una encima de otra. Se utilizan tres índices: el índice de fila, el índice de columna y el índice de profundidad para identificar de forma única cada elemento en una matriz 3D.

Declaración de matriz tridimensional en C++

Para declarar una matriz 3D en C++, necesitamos especificar su tercera dimensión junto con las dimensiones 2D.

Data_Type Array_Name[D][R][C];>

Dónde,

  • Tipo de datos: Tipo de datos a almacenar en cada elemento.
  • Nombre_matriz: Nombre de la matriz
  • D: Número de matrices 2D o Profundidad de la matriz.
  • R: Número de filas en cada matriz 2D.
  • C: Número de columnas en cada matriz 2D.

Ejemplo

int array[3][3][3];>

matriz tridimensional en c ++

Ejemplo: el programa C++ para ilustrar la matriz 3D

C++
// C++ program to illustrate the 3d array #include  using namespace std; int main() {  // declaring 3d array  int arr[3][3][3];  // initializing the array  for (int i = 0; i < 3; i++) {  for (int j = 0; j < 3; j++) {  for (int k = 0; k < 3; k++) {  arr[i][j][k] = i + j + k;  }  }  }  // printing the array  for (int i = 0; i < 3; i++) {  cout << i << 'st layer:' << endl;  for (int j = 0; j < 3; j++) {  for (int k = 0; k < 3; k++) {  cout << arr[i][j][k] << ' ';  }  cout << endl;  }  cout << endl;  }  return 0; }>

Producción
0st layer: 0 1 2 1 2 3 2 3 4 1st layer: 1 2 3 2 3 4 3 4 5 2st layer: 2 3 4 3 4 5 4 5 6>

Explicación

En el código anterior, declaramos una matriz 3D y luego la inicializamos usando tres bucles for anidados. Después de eso, imprimimos todas las capas de la matriz 3D nuevamente usando tres bucles for anidados como se ve en el resultado.

Artículos relacionados

  • Matrices multidimensionales en C++
  • Propiedades de la matriz
  • Decaimiento de matriz