Arreglos (Array)

Array en C++ es un tipo de variable el cual utilizamos para guardar datos. Array consiste en una colección o lista que contiene cero o más tipos de datos, estos array utilizan un índice como punto de inicio cero 0 y el cual ese índice también se utilizando para acceder al valor dentro de elemento del array.

Los array son útiles para guardar múltiples valores en una simple variable, el cual pueden ser organizado por medio de código para que pueda ser más legible y mantenible los datos dentro del array. Un array puede contener cualquier tipo de dato incluyendo números, cadena de caracteres y/o objetos.

Ejemplo de cómo es útil el uso de array:

#include <iostream>

using namespace std;

int main() 
{
  string ocean1 = "Pacific";
  string ocean2 = "Atlantic";
  string ocean3 = "Indian";
  string ocean4 = "Arctic";
  string ocean5 = "Antarctic";

  cout << ocean3 << endl;

  string oceans[] = {
    "Pacific",
    "Atlantic",
    "Indian",
    "Arctic",
    "Antarctic"
  };

  for(int i = 0; i < 5; i++) {
    cout << oceans[i] << endl;
  }

  return 0;
}

Como podemos ver en el ejemplo, en vez de crear cinco 5 variables separada, podemos usar una sola variable el cual contiene los cinco 5 element, utilizando corchete [...] simple que crea el array.

Creación de array

  • Al igual que la variable, se crean indicando el tipo de variable que se organiza el array y el nombre del array. Un par de corchetes [...] con el tamaño del array.
#include <iostream>

using namespace std;

int main() 
{
  string oceans[5];

  oceans[0] = "Pacific";
  oceans[1] = "Atlantic";
}
  • Array literal, utilizando llaves simple {...} , Creado utilizando como tamaño los elemento colocado dentro del contenido del array.
#include <iostream>

using namespace std;

int main() 
{
  string oceans[] = {
    "Pacific",
    "Atlantic",
    "Indian",
    "Arctic",
    "Antarctic"
  };

  for(int i = 0; i < 5; i++) {
    cout << oceans[i] << endl;
  }

  return 0;
}
//-> Pacific Atlantic Indian Arctic Antarctic

Arreglos de multiple dimension

Un arreglo puede tener una, dos o mas dimensiones, por ejemplo un arreglo de dos dimensiones tambien denominado atriz es interpretado como arreglo de dimension f (filas) donde cada componente es un arreglo de dimension c (columna). Para crear arreglos de múltiple dimensiones o matrices seguimos las siguientes reglas type array_name[row][columns]

#include <iostream>

using namespace std;

int main()
{
    string persons[][5] = {
        {"John ", "Doe "},
        {"Mary ", "Poppins "},
        {"James ", "Indian "},
        {"Peter ", "Timothy "},
        {"Carol ", "Dillar "}
    };

    for(int i = 0; i < 5; i++) {
        for(int j = 0; j < 5; j++) {
            cout << persons[i][j];
        }
    }

    cout << endl;

    return 0;
}
//-> John Doe Mary Poppins James Indian Peter Timothy Carol Dillar

En los arreglos de múltiple dimensiones es necesario que al menos la última definición de corchetes tengas especificado el tamaño de ese arreglo de lo contrario el compilador te retornará un error en compilación a diferencias que arreglos de una sola dimensión no es necesario esto.

Acceso a elemento de array

Para acceder a un elemento dentro del array, utilizamos la variable del array junto el índice del elemento en corchetes.

#include <iostream>

using namespace std;

int main() 
{
  string oceans[] = {
    "Pacific",
    "Atlantic",
    "Indian",
    "Arctic",
    "Antarctic"
  };

  cout << oceans[2] << endl;

  return 0;
}

Para acceder a arreglos de múltiple dimensión utilizamos doble corchete o corchetes basado a las dimensiones.

#include <iostream>

using namespace std;

int main()
{
    string persons[][5] = {
        {"John ", "Doe "},
        {"Mary ", "Poppins "},
        {"James ", "Indian "},
        {"Peter ", "Timothy "},
        {"Carol ", "Dillar "}
    };

    cout << "Row 2, Column 0: " << persons[2][0] << endl;
    cout << "Row 4, Column 1: " << persons[4][1] << endl;
    cout << "User name: " << persons[2][0] << persons[4][1] << endl;

    return 0;
}
//-> Row 2, Column 0: James 
//-> Row 4, Column 1: Dillar 
//-> User name: James Dillar

Operaciones con matrices

Para realizar operaciones con los arreglos de múltiple dimensiones o matrices, ambas matrices debe ser igual al numero de filas y columnas.

#include <iostream>

using namespace std;

int main()
{
    int 
        a[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}}, 
        b[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}}, 
        c[3][3], 
        i, 
        j;

    // Display arrays
    for(i = 0; i < 3; i++) {
        for(j = 0; j < 3; j++) {
            // cout << a[i][j] << endl;
        }
    }

    for(i = 0; i < 3; i++) {
        for(j = 0; j < 3; j++) {
            // cout << b[i][j] << endl;
        }
    }

    // Matrix arrays additions
    for(i = 0; i < 3; i++) {
        for(j = 0; j < 3; j++) {
            c[i][j] = a[i][j] + b[i][j];
            cout << c[i][j]  << endl;
        }
    }

    return 0;
}
//-> 2 4 6 8 10 12 14 16 18

Intercambios de valores

Este concepto es utilizado para cambiar posiciones de valores de arreglo sin perder información ya existente en arreglos. El objetivo es declarar una variable temporera fuera del arreglo y utilizarla para efectuar el cambio. En el siguiente ejemplo veremos cómo implementarlo de manera básica.

#include <iostream>

using namespace std;

int main()
{
    int a = 2, b = 4, temp;

    cout << "Value of a: " << a << ", b: " << b << endl;

    temp = a;
    a = b;
    b = temp;

    cout << "After changes value of a: " << a << ", b: " << b << endl;

    return 0;
}
//-> Value of a: 2, b: 4
//-> After changes value of a: 4, b: 2

Ahora un ejemplo de la misma implementación en arreglos:

#include <iostream>

using namespace std;

const int SIZE = 5;

void displayList(int nums[]) {
    cout << "Inital value order: ";

    for(int i = 0; i < SIZE; i++) {
        cout << nums[i] << " ";
    }

    cout << "\n";
}

int main()
{
    int nums[SIZE] = {1, 2, 3, 4, 5};
    displayList(nums);

    // Swap the 0th index with the last
    int temp = nums[0];
    nums[0] = nums[SIZE-1];
    nums[SIZE-1] = temp;

    displayList(nums);

    return 0;
}
//-> Inital value order: 1 2 3 4 5 
//-> Inital value order: 5 2 3 4 1

Punteros y manipulación de arreglos

Al momento que creamos arreglo, estos se reservan en espacio de memoria consecutivos para almacenar cada uno de los valores del arreglo. Podemos identificador de una arreglo puede ser tratado como un apuntador al primer elemento de una colección.

#include <iostream>

using namespace std;

int main()
{
    int array[] = {10, 20, 30, 40, 50};

    cout << array[0] << endl;

    cout << *array << endl;

    return 0;
}
//-> 10
//-> 10

Ya que los elemento en el arreglo están de forma consecutivas, sabiendo que el identificador se trata como un apuntador al primer elemento, es suficiente con sumar una unidad a dicho apuntador si queremos acceder al segundo elemento, suma dos si queremos acceder al tercero y así sucesivamente.

#include <iostream>

using namespace std;

int main()
{
    int array[] = {10, 20, 30, 40, 50};

    cout << *array << endl;
    cout << *(array + 1) << endl;
    cout << *(array + 2) << endl;

    for(int i = 0; i < 5; i++) {
        cout << *(array + i) << " ";
    }

    cout << endl;

    return 0;
}
//-> 10
//-> 20
//-> 30
//-> 10 20 30 40 50

Arreglo de punteros

#include <iostream>

using namespace std;

int main()
{
    int a[] = {10, 20, 30, 40, 50};
    int *ptr[3];

    for(int i = 0; i < 3; i++) {
        ptr[i] = &a[i];
    }

   for(int i = 0; i < 3; i++) {
       cout << *ptr[i] << endl;
   }

    return 0;
}
//-> 10 20 30

Acceder a arreglo con punteros

#include <iostream>

using namespace std;

int main()
{
    int a[5] = {10, 20, 30, 40, 50}, sum = 0;
    int *ptr;

    ptr = a;

   for(int i = 0; i < 5; i++) {
       sum = sum + *ptr;
       ptr++;
   }

   cout << "Sum of the array: " << sum << endl;

   return 0;
}
//-> Sum of the array: 150

results matching ""

    No results matching ""