Matrices en C++ | Declarar | Inicializar | Ejemplos de puntero a matriz
¿Qué es una matriz?
Una matriz es una estructura de datos que almacena un elemento del mismo tipo de datos de forma secuencial. A C++ La matriz tiene un tamaño fijo.
Puede ver una matriz como una colección de variables de un tipo de datos similar. En lugar de declarar cada variable y asignarle un valor individualmente, puede declarar una variable (la matriz) y agregarle los valores de las distintas variables. Cada valor agregado a la matriz se identifica mediante un índice.
¿Por qué necesitamos arreglos?
Matrices Son muy importantes en cualquier lenguaje de programación. Proporcionan una forma más conveniente de almacenar variables o una colección de datos de un tipo de datos similar juntos en lugar de almacenarlos por separado. Se accederá a cada valor de la matriz por separado.
Declarar una matriz en C++
Declaración de matriz en C++ Implica indicar el tipo y el número de elementos que almacenará la matriz. Sintaxis:
type array-Name [ array-Size ];
Reglas para declarar una matriz unidimensional en C++.
- Tipo: El tipo es el tipo de elementos que se almacenarán en la matriz y debe ser válido. C++ tipo de datos
- Nombre de matriz: El nombre de la matriz es el nombre que se asignará a la matriz.
- Tamaño de matriz: El tamaño de la matriz es la cantidad de elementos que se almacenarán en la matriz. Debe ser un número entero y mayor que 0.
Por ejemplo, puedes crear una matriz llamada edad y almacenar las edades de 5 estudiantes de la siguiente manera:
int age[5];
La edad de la matriz almacenará 5 números enteros que representan las edades de diferentes estudiantes.
Inicialización de matriz
La inicialización de una matriz es el proceso de asignar/almacenar elementos a una matriz. La inicialización se puede realizar en una sola declaración o una por una. Tenga en cuenta que el primer elemento de una matriz se almacena en el índice 0, mientras que el último elemento se almacena en el índice n-1, donde n es el número total de elementos de la matriz.
En el caso de la matriz de edad, el primer elemento se almacenará en el índice 0, mientras que el último elemento se almacenará en el índice 4.
Usemos la matriz de edad para demostrar cómo se puede realizar la inicialización de la matriz:
int age[5] = {19, 18, 21, 20, 17};
El número total de elementos dentro de { } no puede exceder el valor indicado dentro de [ ]. El elemento 19 está en el índice 0, 18 en el índice 1, 21 en el índice 2, 20 en el índice 3 y 17 en el índice 4. Si no indica el número de elementos que se almacenarán en la matriz dentro de [], la matriz sólo será lo suficientemente grande para contener los elementos agregados dentro de {}. Por ejemplo:
int age[] = {19, 18, 21, 20, 17};
La declaración anterior creará exactamente la misma matriz que la anterior. También puedes asignar un elemento a una matriz usando su índice. Por ejemplo:
age[3] = 20;
La declaración anterior almacenará el valor 20 en el índice 3 de la matriz denominada edad. Esto significa que 20 serán los 4.th elemento de la matriz.
Tipos de matrices
Hay dos tipos de C++ matrices:
- Matriz unidimensional
- Matriz multidimensional
- Puntero a una matriz
Matriz unidimensional
Se trata de una matriz en la que los elementos de datos están dispuestos linealmente en una sola dimensión. Comúnmente se le llama matriz 1-D. Sintaxis:
datatype array-name[size];
- El nombre de la matriz es el nombre de la matriz.
- El tamaño es la cantidad de elementos que se almacenarán en la matriz.
Por ejemplo:
#include <iostream> using namespace std; int main() { int age[5] = { 19, 18, 21, 20, 17 }; for (int x = 0; x < 5; x++) { cout <<age[x]<<"\n"; } }
Salida:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluyendo el archivo de encabezado iostream en nuestro código. Nos permitirá leer y escribir en la consola.
- Incluyendo el espacio de nombres estándar para usar sus clases y funciones sin llamarlo.
- Llamar a la función main() dentro de la cual se debe agregar la lógica del programa.
- Inicio del cuerpo de la función main().
- Declarar una matriz llamada edad para almacenar 5 números enteros. También se han inicializado los 5 números enteros.
- Cree una variable entera x usando un bucle for.
- El comienzo del cuerpo del bucle for.
- Usar la variable de bucle x para iterar sobre los valores de la edad de la matriz e imprimirlos en la consola. "\n" es un carácter de nueva línea y se imprime en una nueva línea después de cada iteración.
- Fin del cuerpo del en bucle.
- Fin del cuerpo de la función main().
Matriz multidimensional
Se trata de una matriz en la que los elementos de datos se organizan para formar una matriz de matrices. Una matriz multidimensional puede tener cualquier número de dimensiones, pero las matrices bidimensionales y tridimensionales son comunes. Sintaxis:
datatype array-name[d1][d2][d3]...[dn];
El nombre de la matriz es el nombre de la matriz que tendrá n dimensiones. Por ejemplo:
Matriz bidimensional
Una matriz 2D almacena datos en una lista con una matriz 1D. Es una matriz con filas y columnas. Para declarar una matriz 2D, utilice la siguiente sintaxis:
type array-Name [ x ][ y ];
El tipo debe ser válido. C++ tipo de datos. Vea una matriz 2D como una tabla, donde x denota el número de filas mientras que y denota el número de columnas. Esto significa que identifica cada elemento en una matriz 2D usando la forma a[x][y], donde x es el número de filas e y el número de columnas a las que pertenece el elemento.
A continuación se muestra un ejemplo de cómo inicializar una matriz 2D:
int a[2][3] = { {0, 2, 1} , /* row at index 0 */ {4, 3, 7} , /* row at index 1 */ };
En el ejemplo anterior, tenemos una matriz 2D que puede verse como una matriz de 2×3. Hay 2 filas y 3 columnas. Se puede acceder al elemento 0 como [0] [1] porque está ubicado en la intersección de la fila indexada 0 y la columna indexada 1. Se puede acceder al elemento 3 como [1] [2] porque está ubicado en la intersección de la fila indexada 1 y la columna indexada 2.
Tenga en cuenta que simplemente agregamos llaves para diferenciar las diferentes filas de elementos. La inicialización también se podría haber realizado de la siguiente manera:
int a[2][3] = {0, 2, 1, 4, 3, 7}; };
Las siguientes C++ El ejemplo demuestra cómo inicializar y recorrer una matriz 2D:
#include <iostream> using namespace std; int main() { // a 2x3 array int a[3][2] = { {0, 2}, {1, 4}, {3, 7} }; // traverse array elements for (int i=0; i<3; i++) for (int j=0; j<2; j++) { cout << "a[" <<i<< "][" <<j<< "]: "; cout << a[i][j] << endl; } return 0; }
Salida:
Aquí hay una captura de pantalla del código anterior:
Explicación del código:
- Incluyendo el archivo de encabezado iostream en nuestro código. Nos permitirá leer y escribir en la consola.
- Incluyendo el espacio de nombres estándar para usar sus clases y funciones sin llamarlo.
- Llamar a la función main() dentro de la cual se debe agregar el código.
- Inicio del cuerpo de la función main().
- Un comentario. El C++ El compilador omitirá esto.
- Declarando una matriz 2D de 3 filas y 2 columnas. También se han agregado elementos a la matriz.
- Un comentario. El C++ El compilador omitirá esto.
- Creando una variable usando un bucle for. Esta variable iterará sobre los índices de fila de la matriz.
- Creando una variable j usando un bucle for. Esta variable iterará sobre los índices de las columnas de la matriz.
- Inicio del cuerpo de los bucles.
- Imprima los valores de las variables i y j en la consola dentro de corchetes en la consola.
- Imprima el valor almacenado en el índice [i][j] de la matriz a.
- Fin del cuerpo de los bucles.
- La función main() debería devolver un valor entero si el programa funciona bien.
- Fin del cuerpo de la función main().
Matriz tridimensional
Una matriz 3D es una matriz de matrices. Cada elemento de una matriz 3D se identifica mediante un conjunto de 3 índices. Para acceder a los elementos de una matriz 3D, utilizamos tres bucles for. Por ejemplo:
#include<iostream> using namespace std; void main() { int a[2][3][2] = {{{4, 8},{2, 4},{1, 6}}, {{3, 6},{5, 4},{9, 3}}}; cout << "a[0][1][0] = " << a[0][1][0] << "\n"; cout << "a[0][1][1] = " << a[0][1][1] << "\n"; }
Salida:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluyendo el archivo de encabezado iostream en nuestro código. Nos permitirá leer y escribir en la consola.
- Incluyendo el espacio de nombres estándar para usar sus clases y funciones sin llamarlo.
- Llamar a la función main() dentro de la cual se debe agregar la lógica del programa.
- Inicio del cuerpo de la función main().
- Declarar una matriz 3D denominada de tamaño 2x3x2. Los valores de la matriz también se han inicializado.
- Accediendo al elemento almacenado en el índice [0][1][0] de la matriz e imprimiéndolo en la consola.
- Accediendo al elemento almacenado en el índice [0][1][1] de la matriz e imprimiéndolo en la consola.
- Fin del cuerpo de la función main().
Puntero a una matriz
A puntero es una variable que contiene una dirección. Además de usar un puntero para almacenar la dirección de una variable, podemos usarlo para almacenar la dirección de una celda de una matriz. El nombre de una matriz apunta constantemente a su primer elemento. Considere la declaración que figura a continuación:
int age[5];
La edad es un puntero a $age[0], la dirección del primer elemento de una matriz denominada age. Considere el siguiente ejemplo:
#include <iostream> using namespace std; int main() { int *john; int age[5] = { 19, 18, 21, 20, 17 }; john = age; cout << john << "\n"; cout << *john; }
Salida:
Tenga en cuenta que el primer valor del resultado anterior puede devolver un valor diferente dependiendo de la dirección asignada al primer elemento de la matriz en la memoria de su computadora.
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluyendo el archivo de encabezado iostream en nuestro código. Nos permitirá leer y escribir en la consola.
- Incluyendo el espacio de nombres estándar para usar sus clases y funciones sin llamarlo.
- Llamar a la función main() dentro de la cual se debe agregar la lógica del programa.
- Inicio del cuerpo de la función main().
- Declarar una variable de puntero llamada *john.
- Declarar una matriz de enteros llamada edad para almacenar 5 números enteros. También se han inicializado los valores de los números enteros.
- Asignando a la variable john el valor de la dirección del elemento almacenado en el primer índice del array age.
- Imprimiendo el valor de la variable john, que es la dirección del elemento almacenado en el primer índice de la matriz age.
- Imprimiendo el primer valor almacenado en la edad de la matriz.
- Fin del cuerpo de la función main().
Los nombres de las matrices se pueden utilizar como punteros constantes y viceversa. Esto significa que puede acceder al valor almacenado en el índice 3 de la edad de la matriz con *(edad + 3). Por ejemplo:
#include <iostream> using namespace std; int main() { // an array of 5 elements. int age[5] = { 19, 18, 21, 20, 17 }; int *p; p = age; // output array values cout << "Using pointer: " << endl; for (int x=0; x<5; x++) { cout << "*(p + " << x << ") : "; cout << *(p + x) << endl; } cout << "Using age as address: " << endl; for (int x = 0; x < 5; x++) { cout << "*(age + " << x << ") : "; cout << *(age + x) << endl; } return 0; }
Salida:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluyendo el archivo de encabezado iostream en nuestro código. Nos permitirá leer y escribir en la consola.
- Incluyendo el espacio de nombres estándar para usar sus clases y funciones sin llamarlo.
- Llamar a la función main() y comenzar el cuerpo de la función main().
- Un comentario. El C++ El compilador omitirá esto.
- Declarar una matriz llamada edad para almacenar 5 números enteros.
- Creando un puntero entero p.
- Asignando p el valor de la dirección del primer elemento de la matriz age.
- Un comentario. El C++ El compilador omitirá esto.
- Imprime un texto en la consola.
- Crea un número entero x usando un bucle for. El { marca el comienzo del cuerpo del bucle for.
- Imprima los valores de x combinados con algún otro texto en la consola.
- Imprima los valores de *(p + x) en la consola.
- Fin del cuerpo del bucle for.
- Imprime un texto en la consola.
- Crea una variable x usando un bucle for. El { marca el comienzo del cuerpo del bucle for.
- Imprima los valores de x de 0 a 4 junto con algún otro texto.
- Imprima los valores de *(edad + x).
- Fin del cuerpo del bucle for.
- Valor de retorno si el programa se ejecuta correctamente.
- Fin del cuerpo de la función main().
Accediendo a los valores de un Array
Los elementos de una matriz se acceden mediante sus respectivos índices. El índice del elemento al que se accede se agrega entre corchetes [ ] inmediatamente después del nombre de la matriz. Por ejemplo:
int john = age[2];
En el ejemplo anterior, simplemente indicamos que la edad de John está almacenada en el índice 2 de la matriz denominada edad. Esto significa que la edad de John es 3.rd valor en la edad de la matriz. Aquí tienes un completo C++ ejemplo que muestra cómo acceder e imprimir este valor:
#include<iostream> using namespace std; int main() { int age[5] = { 19, 18, 21, 20, 17 }; int john = age[2]; cout << "The age of John is:"<<john; }
Salida:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluyendo el archivo de encabezado iostream en nuestro código. Nos permitirá leer y escribir en la consola.
- Incluyendo el espacio de nombres estándar para usar sus clases y funciones sin llamarlo.
- Llamar a la función main() dentro de la cual se debe agregar el código.
- Inicio de un cuerpo de la función main().
- Declarar una matriz llamada edad para almacenar 5 elementos enteros.
- Accediendo al valor almacenado en el índice 2 de la edad de la matriz y almacenando su valor en una variable llamada john.
- Imprimiendo el valor de la variable john en la consola junto con otro texto.
Ventajas de una matriz en C++
A continuación, se muestran las ventajas y beneficios de utilizar Array en C++:
- Los elementos de la matriz se pueden atravesar fácilmente.
- Fácil de manipular datos de matriz.
- Se puede acceder a los elementos de la matriz de forma aleatoria.
- Las matrices facilitan la optimización del código; por lo tanto, podemos realizar mucho trabajo usando menos código.
- Fácil de ordenar datos de matriz.
Desventajas de una matriz en C++
- Una matriz tiene un tamaño fijo; por lo tanto, no podemos agregarle nuevos elementos después de la inicialización.
- Asignar más memoria de la necesaria genera un desperdicio de espacio de memoria y una menor asignación de memoria puede crear un problema.
- Se debe conocer de antemano el número de elementos que se almacenarán en una matriz.
Resumen
- Una matriz es una estructura de datos que almacena elementos del mismo tipo de datos.
- Los elementos de la matriz se almacenan secuencialmente.
- Los elementos de la matriz se indican mediante sus respectivos índices. El primer elemento está en el índice 0, mientras que el último elemento está en el índice n-1, donde es el número total de elementos de la matriz.
- La declaración de una matriz implica definir los tipos de datos de los elementos de la matriz, así como la cantidad de elementos que se almacenarán en la matriz.
- Una matriz unidimensional almacena elementos secuencialmente.
- Una matriz bidimensional almacena elementos en filas y columnas.
- Una matriz tridimensional es una matriz de matrices.
- Se pueden agregar elementos a una matriz usando sus índices.
- Se accede a los elementos de la matriz utilizando sus índices.
- Una matriz multidimensional tiene más de una dimensión.
- El nombre de la matriz apunta a su primer elemento.
- Las matrices tienen un tamaño fijo, lo que significa que no se pueden agregar nuevos elementos a la matriz después de su inicialización.