in

Matrices en C / C ++ – GeeksforGeeks

gfg 200x200 min

Una matriz en C / C ++ o en cualquier lenguaje de programación es una colección de elementos de datos similares almacenados en ubicaciones de memoria contiguas y se puede acceder a los elementos de forma aleatoria utilizando índices de una matriz. Se pueden usar para almacenar colecciones de tipos de datos primitivos como int, float, double, char, etc. de cualquier tipo en particular. Para agregarle, una matriz en C / C ++ puede almacenar tipos de datos derivados como las estructuras, punteros, etc. A continuación se muestra la representación gráfica de una matriz.

matrices

¿Por qué necesitamos matrices?
Podemos usar variables normales (v1, v2, v3, ..) cuando tenemos una pequeña cantidad de objetos, pero si queremos almacenar una gran cantidad de instancias, se vuelve difícil administrarlas con variables normales. La idea de una matriz es representar muchas instancias en una variable.
Declaración de matriz en C / C ++:

Array Declaration In C

Nota: En la imagen de arriba int a[3]= {[0…1]= 3}; este tipo de declaración ha quedado obsoleta desde GCC 2.5

Hay varias formas en las que podemos declarar una matriz. Se puede hacer especificando su tipo y tamaño, inicializándolo o ambos.

Declaración de matriz especificando tamaño

C

int arr1[10];

int n = 10;

int arr2[n];

Declaración de matriz inicializando elementos

C

int arr[] = { 10, 20, 30, 40 }

Declaración de matriz especificando el tamaño e inicializando elementos

C

int arr[6] = { 10, 20, 30, 40 }

Ventajas de una matriz en C / C ++:

  1. Acceso aleatorio de elementos mediante índice de matriz.
  2. Uso de menos línea de código, ya que crea una única matriz de varios elementos.
  3. Fácil acceso a todos los elementos.
  4. El recorrido a través de la matriz se vuelve fácil con un solo bucle.
  5. La clasificación se vuelve fácil, ya que se puede lograr escribiendo menos líneas de código.

Desventajas de una matriz en C / C ++:

  1. Permite introducir un número fijo de elementos que se decide en el momento de la declaración. A diferencia de una lista vinculada, una matriz en C no es dinámica.
  2. La inserción y eliminación de elementos puede resultar costosa, ya que los elementos deben administrarse de acuerdo con la nueva asignación de memoria.

Datos sobre Array en C / C ++:

  • Acceso a los elementos de la matriz:
    Se accede a los elementos de la matriz mediante un índice de números enteros. El índice de la matriz comienza con 0 y va hasta el tamaño de la matriz menos 1.
  • El nombre de la matriz también es un puntero al primer elemento de la matriz.

Array In C

Ejemplo:

C

#include <stdio.h>

int main()

{

    int arr[5];

    arr[0] = 5;

    arr[2] = -10;

    arr[3 / 2] = 2;

    arr[3] = arr[0];

    printf("%d %d %d %d", arr[0],

           arr[1], arr[2], arr[3]);

    return 0;

}

C ++

#include <iostream>

using namespace std;

int main()

{

    int arr[5];

    arr[0] = 5;

    arr[2] = -10;

    

    arr[3 / 2] = 2;

    arr[3] = arr[0];

    cout << arr[0] << " " << arr[1] << " " << arr[2] << " "

         << arr[3];

    return 0;

}

Producción

5 2 -10 5

Sin índice de comprobación fuera del límite:
No hay verificación de índices fuera de límites en C / C ++, por ejemplo, el siguiente programa se compila bien pero puede producir una salida inesperada cuando se ejecuta.

C

#include <stdio.h>

int main()

{

    int arr[2];

    printf("%d ", arr[3]);

    printf("%d ", arr[-2]);

    return 0;

}

C ++

#include <iostream>

using namespace std;

int main()

{

    int arr[2];

    cout << arr[3] << " ";

    cout << arr[-2] << " ";

    return 0;

}

En C, no es un error del compilador inicializar una matriz con más elementos que el tamaño especificado. Por ejemplo, el programa siguiente se compila bien y muestra solo una advertencia.

C

#include <stdio.h>

int main()

{

    

    

    int arr[2] = { 10, 20, 30, 40, 50 };

    return 0;

}

Advertencias:

prog.c: In function 'main':
prog.c:7:25: warning: excess elements in array initializer
  int arr[2] = { 10, 20, 30, 40, 50 };
                         ^
prog.c:7:25: note: (near initialization for 'arr')
prog.c:7:29: warning: excess elements in array initializer
  int arr[2] = { 10, 20, 30, 40, 50 };
                             ^
prog.c:7:29: note: (near initialization for 'arr')
prog.c:7:33: warning: excess elements in array initializer
  int arr[2] = { 10, 20, 30, 40, 50 };
                                 ^
prog.c:7:33: note: (near initialization for 'arr')
  • Nota: El programa no se compilará en C ++. Si guardamos el programa anterior como .cpp, el programa genera un error del compilador «Error: demasiados inicializadores para ‘int [2]’”.

Los elementos se almacenan en ubicaciones de memoria contiguas
Ejemplo:

C

#include <stdio.h>

int main()

{

    

    

    

    

    

    

    

    int arr[5], i;

    printf("Size of integer in this compiler is %lun",

           sizeof(int));

    for (i = 0; i < 5; i++)

        

        

        printf("Address arr[%d] is %pn", i, &arr[i]);

    return 0;

}

C ++

#include <iostream>

using namespace std;

int main()

{

    

    

    

    

    

    

    

    int arr[5], i;

    cout << "Size of integer in this compiler is "

         << sizeof(int) << "n";

    for (i = 0; i < 5; i++)

        

        

        cout << "Dirección arr[" << i << "] es " << &arr[i]

             << "n";

    return 0;

}

Producción
Size of integer in this compiler is 4
Address arr[0] is 0x7ffe75c32210
Address arr[1] is 0x7ffe75c32214
Address arr[2] is 0x7ffe75c32218
Address arr[3] is 0x7ffe75c3221c
Address arr[4] is 0x7ffe75c32220

Otra forma de atravesar la matriz

C ++

#include<bits/stdc++.h>

using namespace std;

int main()

{

    int arr[6]={11,12,13,14,15,16};

    

    for(int i=0;i<6;i++)

        cout<<arr[i]<<" ";

  

  cout<<endl;

      

    cout<<"By Other Method:"<<endl;

    for(int i=0;i<6;i++)  

        cout<<i[arr]<<" ";

  

    cout<<endl;

    return 0;

}

Producción
11 12 13 14 15 16 
By Other Method:
11 12 13 14 15 16 

Matriz vs punteros
Las matrices y el puntero son dos cosas diferentes (podemos verificar aplicando sizeof). La confusión ocurre porque el nombre de la matriz indica la dirección del primer elemento y las matrices siempre se pasan como punteros (incluso si usamos corchetes). Consulte ¿Diferencia entre puntero y matriz en C? para más detalles.
¿Qué es vector en C ++?
Un vector en C ++ es una clase en STL que representa una matriz. Las ventajas del vector sobre las matrices normales son,

  • No necesitamos el tamaño de paso como parámetro adicional cuando declaramos un vector, es decir, los vectores admiten tamaños dinámicos (no tenemos que especificar inicialmente el tamaño de un vector). También podemos cambiar el tamaño de un vector.
  • Los vectores tienen muchas funciones integradas, como eliminar un elemento, etc.

Para saber más sobre las funcionalidades proporcionadas por vector, consulte vector en C ++ para obtener más detalles.

Artículos relacionados:
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.

Si desea aprender de los mejores videos seleccionados y problemas de práctica, consulte el Curso básico de C de Básico a Avanzado C.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

apple touch icon@2

hashmap – Mapa hash en Python

150px Kindle

Kindle vs Nook – Diferencia y comparación