HOWTO · C++

Cómo hacer un bucle sobre un array en C++

Este artículo demuestra cómo iterar sobre un array en C++

En esta página

Un array almacena una cantidad fija de elementos del mismo tipo. Para recorrerlos todos, elige un bucle según necesites el índice, quieras modificar los elementos o prefieras un algoritmo que acepte una función invocable. Cada ejemplo define su propio array y main, por lo que puede compilarse como un programa independiente. (C++)

Usar un bucle for con índice

Un bucle con índice permite consultar la posición actual mediante i. Sus tres expresiones inicializan el índice, comprueban que siga dentro de los límites del array y lo incrementan después de cada iteración. Se usa la comparación < count porque los índices válidos de un array de cinco elementos van de 0 a 4.

Ejecuta este ejemplo. El código y la salida del bloque se conservan sin traducir; cualquier etiqueta visible permanece en inglés.

#include <iostream>

int main() {
    int values[] = {10, 20, 30, 40, 50};
    const int count = sizeof(values) / sizeof(values[0]);

    for (int i = 0; i < count; ++i) {
        std::cout << values[i] << ' ';
    }
    std::cout << '\n';
}
10 20 30 40 50

La expresión sizeof calcula la cantidad de elementos mientras values todavía es un array. Si pasas el array a una función, allí se trata como un puntero; por eso, pasa la cantidad por separado o usa un contenedor que incluya su tamaño. Mantén la condición vinculada a esa cantidad e incrementa i una vez por iteración para evitar acceder más allá del último elemento.

Usar un bucle while

Un bucle while resulta útil cuando la condición para continuar es más compleja que un simple recuento. Para recorrer un array, inicializa el índice antes del bucle, compruébalo antes de acceder al elemento e increméntalo dentro del cuerpo. Si olvidas actualizarlo, el bucle podría no terminar.

Ejecuta este ejemplo. El código y la salida del bloque se conservan sin traducir; cualquier etiqueta visible permanece en inglés.

#include <iostream>

int main() {
    int values[] = {5, 15, 25, 35};
    const int count = sizeof(values) / sizeof(values[0]);
    int i = 0;

    while (i < count) {
        std::cout << values[i] << ' ';
        ++i;
    }
    std::cout << '\n';
}
5 15 25 35

Así se recorren los elementos en orden de índice. Usa un bucle for cuando convenga agrupar la inicialización, la condición y la actualización; usa while cuando la condición o la actualización dependan de otra operación del bucle.

Usar un bucle for basado en rangos

Un bucle basado en rangos recorre directamente cada elemento, sin especificar un índice. Una variable int value sin referencia es una copia, lo cual resulta adecuado para valores pequeños cuando el bucle solo los lee. Usa const int& para evitar la copia y mantener los elementos de solo lectura, o int& si el bucle debe modificar el array original.

Ejecuta este ejemplo. El código y la salida del bloque se conservan sin traducir; cualquier etiqueta visible permanece en inglés.

#include <iostream>

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

    for (const int& value : values) {
        std::cout << value << ' ';
    }
    std::cout << '\n';
}
1 2 3 4 5

Por ejemplo, si cambias la variable del bucle a int& value y asignas un valor a value, se actualiza el elemento correspondiente del array. Esta forma es concisa cuando se procesan todos los elementos en orden y no se necesita conocer su posición.

Usar std::for_each para recorrer un array

std::for_each es un algoritmo, no un método. Recibe los iteradores al inicio del rango y a la posición posterior al último elemento, seguidos de una función invocable que se ejecuta para cada elemento. Incluye <algorithm> para el algoritmo y <array> para std::array.

Ejecuta este ejemplo. El código y la salida del bloque se conservan sin traducir; cualquier etiqueta visible permanece en inglés.

#include <algorithm>
#include <array>
#include <iostream>

int main() {
    std::array<int, 4> values = {2, 4, 6, 8};

    std::for_each(values.begin(), values.end(), [](int value) {
        std::cout << value * 2 << ' ';
    });
    std::cout << '\n';
}
4 8 12 16

La lambda es la función invocable de este ejemplo. Su parámetro int value copia cada elemento; usa int& value si la función debe modificar el array. begin() identifica el primer elemento y end() señala la posición posterior al último, de modo que el algoritmo recibe el rango completo que debe recorrer.

Elegir un bucle según la tarea

Usa un bucle for con índice cuando necesites conocer la posición, comparar un elemento con uno adyacente o controlar el paso entre posiciones. Usa while cuando una condición independiente determine cuándo termina el recorrido. Elige un bucle for basado en rangos para acceder directamente y de forma legible a cada elemento; usa una referencia si necesitas evitar copias o modificar valores. Usa std::for_each cuando expresar el trabajo mediante una función invocable encaje con un diseño basado en algoritmos. Todas estas formas permiten recorrer un array: elige según la información y el control que requiera tu tarea, y mantén el acceso por índice dentro de los límites válidos del array.