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. Una matriz de C++ 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 diversas variables. Cada valor agregado a la matriz se identifica mediante un índice.
En este tutorial de C++, aprenderá:
- ¿Qué es una matriz?
- ¿Por qué necesitamos arreglos?
- Declarar una matriz en C++
- Inicialización de matriz
- Tipos de arreglos
- Matriz unidimensional
- Matriz multidimensional
- Matriz bidimensional
- Arreglo tridimensional
- Puntero a una matriz
- Acceso a los valores de un Array
- Ventajas de un Array en C++
- Desventajas de una matriz en C++
¿Por qué necesitamos arreglos?
Las 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++
La declaración de matriz en C++ implica indicar el tipo y la cantidad de elementos que la matriz almacenará. Sintaxis:
type array-Name [ array-Size ];
Reglas para declarar un arreglo unidimensional en C++.
- Tipo: El tipo es el tipo de elementos que se almacenarán en la matriz y debe ser un tipo de datos C++ válido.
- Nombre de matriz: El nombre de matriz es el nombre que se asignará a la matriz.
- Tamaño de matriz: El tamaño de la matriz es el número de elementos que se almacenarán en la matriz. Debe ser un número entero y mayor que 0.
Por ejemplo, puede crear una matriz llamada edad y almacenar las edades de 5 estudiantes de la siguiente manera:
int age[5];
La matriz age almacenará 5 números enteros que representan las edades de diferentes estudiantes.
Inicialización de matriz
La inicialización de arreglos es el proceso de asignar/almacenar elementos a un arreglo. La inicialización se puede hacer 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 solo 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 puede asignar un elemento a una matriz utilizando 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á el 4 th elemento de la matriz.
Tipos de matrices
Hay dos tipos de arreglos de C++:
- Matriz unidimensional
- Matriz multidimensional
- Puntero a una matriz
Matriz unidimensional
Esta es una matriz en la que los elementos de datos se organizan 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 enteros. Los 5 enteros también se han inicializado.
- Cree una variable entera x usando un bucle for.
- El comienzo del cuerpo del ciclo for.
- Utilizar la variable de bucle x para iterar sobre los valores de la matriz age e imprimirlos en la consola. El "\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 bucle for a.
- Fin del cuerpo de la función main().
Matriz multidimensional
Esta es 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 1-D. Es una matriz con filas y columnas. Para declarar una matriz 2D, use la siguiente sintaxis:
type array-Name [ x ][ y ];
El tipo debe ser un tipo de datos C++ válido. 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 utilizando la forma a[x][y], donde x es el número de fila e y el número de columnas a las que pertenece el elemento.
Aquí hay 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 se puede ver como una matriz de 2 × 3. Hay 2 filas y 3 columnas. Se puede acceder al elemento 0 como a[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 a[1][2] porque está ubicado en la intersección de fila indexada 1 y columna indexada 2.
Tenga en cuenta que simplemente agregamos llaves para diferenciar las diferentes filas de elementos. La inicialización también podría haberse hecho de la siguiente manera:
int a[2][3] = {0, 2, 1, 4, 3, 7}; };
El siguiente ejemplo de C++ demuestra cómo inicializar y atravesar 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 compilador de C++ omitirá esto.
- Declarar una matriz 2D de 3 filas y 2 columnas. También se han agregado elementos a la matriz.
- Un comentario. El compilador de C++ omitirá esto.
- Crear una variable i usando un bucle for a. Esta variable iterará sobre los índices de fila de la matriz.
- Crear una variable j usando un bucle for. Esta variable iterará sobre los índices de columna de la matriz.
- Inicio del cuerpo de los bucles.
- Imprime los valores de las variables i y j en la consola entre corchetes en la consola.
- Imprime 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, usamos 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 an de tamaño 2x3x2. Los valores de la matriz también se han inicializado.
- Acceder al elemento almacenado en el índice [0][1][0] de la matriz e imprimirlo en la consola.
- Acceder al elemento almacenado en el índice [0][1][1] de la matriz e imprimirlo en la consola.
- Fin del cuerpo de la función main().
Puntero a una matriz
Un 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 matriz. El nombre de una matriz apunta constantemente a su primer elemento. Considere la declaración dada a continuación:
int age[5];
La edad es un puntero a $edad[0], la dirección del primer elemento de una matriz llamada edad. 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 de la salida anterior puede devolver un valor diferente según 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 enteros. Los valores de los enteros también se han inicializado.
- Asignar a la variable john el valor de la dirección del elemento almacenado en el primer índice del arreglo age.
- Imprimir 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 matriz age.
- Fin del cuerpo de la función main().
Los nombres de las matrices se pueden usar como punteros constantes, y viceversa también es cierto. Esto significa que puede acceder al valor almacenado en el índice 3 de la matriz age con *(age + 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 comienzo del cuerpo de la función main().
- Un comentario. El compilador de C++ omitirá esto.
- Declarar una matriz llamada edad para almacenar 5 enteros.
- Crear un puntero de entero p.
- Asignando a p el valor de la dirección del primer elemento del arreglo edad.
- Un comentario. El compilador de C++ omitirá esto.
- Imprime algo de texto en la consola.
- Cree un entero x usando un bucle for. El { marca el comienzo del cuerpo del bucle for a.
- Imprima los valores de x combinados con algún otro texto en la consola.
- Imprime los valores de *(p + x) en la consola.
- Fin del cuerpo del bucle for a.
- Imprime algo de texto en la consola.
- Cree una variable x usando un bucle for. El { marca el comienzo del cuerpo del bucle for.
- Imprime los valores de x de 0 a 4 junto con otro texto.
- Imprime los valores de *(edad + x).
- Fin del cuerpo del ciclo for.
- Valor devuelto si el programa se ejecuta correctamente.
- Fin del cuerpo de la función main().
Acceso a los valores de un Array
Se accede a los elementos de una matriz utilizando 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 afirmamos que la edad de Juan se almacena en el índice 2 de la matriz denominada edad. Esto significa que la edad de john es el 3 rd valor en la edad de la matriz. Aquí hay un ejemplo completo de C++ 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 del arreglo y almacenando su valor en una variable llamada john.
- Imprimir el valor de la variable john en la consola junto con otro texto.
Ventajas de un Array en C++
Estos son los pros/beneficios de usar Array en C++:
- Los elementos de la matriz se pueden recorrer fácilmente.
- Fácil de manipular datos de matriz.
- Se puede acceder a los elementos de la matriz aleatoriamente.
- 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 requerida conduce a desperdiciar espacio de memoria, y una menor asignación de memoria puede crear un problema.
- La cantidad de elementos que se almacenarán en una matriz debe conocerse de antemano.
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 está 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.
- Los elementos se pueden agregar a una matriz usando sus índices.
- Se accede a los elementos del arreglo usando 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.
Lenguaje C
- Matrices de C#
- Pasar matriz a una función en programación C++
- Matrices de copia de Java
- C++ do...while bucle con ejemplos
- C++ Asignación dinámica de arreglos con ejemplo
- Punteros de C++ con ejemplos
- Tipo de datos Char de C++ con ejemplos
- Sobrecarga de operadores de C++ con ejemplos
- Funciones de C++ con ejemplos de programas
- Tutorial de colecciones de C# con ejemplos
- Tutorial de Java Arrays:declarar, crear, inicializar [ejemplo]