Saltar a contenido

Arreglos de datos clásicos en C++

Definición y acceso sencuencial de arreglos

Un arreglo o array es una estructura que sirve para almacenar una sucesión de datos del mismo tipo, siendo por tanto homogénea y finita:

int numeros[]{2, 5, 8, 2, 5, 6, 9, 10, 1, 3};

La lectura secuencial se puede realizar fácilmente mediante bucles for, ya sea con índices:

for (size_t i{0}; i < 10; i++)
{
    std::cout << numeros[i] << std::endl;
}

También podemos utilizar std::size para detectar el número de elementos automáticamente:

for (size_t i = 0; i < std::size(numeros); i++)
{
    std::cout << numeros[i] << std::endl;
}

Rizando el rizo podemos sacar este número dividiendo el tamaño en bytes del arreglo entre el tamaño en bytes del tipo de dato de la primera posición:

size_t size{sizeof(numeros) / sizeof(numeros[0])};
for (size_t i = 0; i < size ; i++)
{
    std::cout << numeros[i] << std::endl;
}

Otra forma de recorrer el arreglo es mediante el acceso a los elementos del rango:

for (int numero : numeros)
{
    std::cout << numero << std::endl;
}

Por cierto, nunca debemos asignar valores fuera del arreglo. Esto es curioso porque C++ nos permitirá hacerlo y lo que ocurrirá es que estaremos accediendo a una posición de memoria cualquiera, lo que conllevaría en el peor de los casos, si almacenamos una información, a destruir lo que haya y hacer que el programa deje de funcionar debido a la corrupción de datos:

numeros[100] = 999;  // NO ESCRIBIR FUERA DE LOS LÍMITES

Arreglos multidimensionales y acceso secuencial

Un arreglo multidimensional es un arreglo con otros arreglos anidados, de manera que se crea una estructura con múltiples dimensiones.

La forma de trabajar con N dimensiones es mediante N índices para representar el acceso a cada nivel, como en este ejemplo sencillo:

// tabla de números 3x3 con 9 elementos
int tabla[3][3]{
    {0, 0, 0}, // primera fila
    {1, 1, 1}, // segunda fila
    {2, 2, 2}  // tercera fila
};

La lectura podemos realizar cómodamente con diferentes índices y detectando la longitud de cada dimensión con std::size:

for (size_t i = 0; i < std::size(tabla); i++)
{
    for (size_t j = 0; j < std::size(tabla[j]); j++)
    {
        std::cout << tabla[i][j] << " ";
    }
    std::cout << std::endl;
}
0 0 0
1 1 1
2 2 2

Como curiosidad, podemos almacenar múltiples caracteres en un arreglo multidimensional de caracteres de manera que podamos almacenar cadenas de caracteres, pues no son más que arreglos de caracteres:

// Arreglo de caracteres con 10 posibles caracteres por elemento
char textos[][10]{
    {"Hola"},   // primera cadena
    {"Adios"},  // segunda cadena
    {"Que tal"} // tercera cadena
};

Como std::cout imprime todos los elementos de un arreglo de caracteres como un único elemento podemos imprimir los textos fácilmente:

for (size_t i = 0; i < std::size(frases); i++)
{
    std::cout << frases[i] << std::endl;
}
Hola
Adios
Que tal

Última edición: 08 de Mayo de 2022