Apoyo básico / C++17

Recorridos y ciclos

Llevar al apunte ↗

Descripción

Un ciclo repite instrucciones. Usá for cuando llevás una posición o cantidad de pasos, un recorrido por elementos cuando alcanza con el valor, y while cuando la repetición depende de una condición que va cambiando.

Los recorridos por posición permiten consultar vecinos o modificar un elemento concreto. Los recorridos por valor son útiles para sumar, contar o buscar extremos. Una referencia, indicada con &, permite modificar el elemento que se recorre.

Fijá qué posiciones incluye el recorrido y qué cambia en cada vuelta. En búsquedas y simulaciones, ese avance es lo que permite terminar el ciclo. Para retroceder hasta cero, un índice con signo facilita expresar la condición de salida.

Funciones y operaciones

Forma Uso
for (int i = 0; i < n; ++i) Posiciones de 0 a n - 1
for (int x : v) Lee una copia de cada elemento
for (int& x : v) Accede a cada elemento para modificarlo
for (const string& s : palabras) Lee cada string sin copiarlo
while (condicion) Repite mientras se cumpla
do { ... } while (condicion); Ejecuta al menos una vez y después consulta la condición
break Termina el ciclo más interno
continue Pasa a la próxima vuelta del ciclo más interno

Ejemplos

Sumar elementos

vector<int> v = {4, 2, 7};
long long suma = 0;
for (int x : v) {
    suma += x;
}
// suma vale 13

Modificar usando una referencia

vector<int> v = {4, 2, 7};
for (int& x : v) {
    x *= 2;
}
// v queda {8, 4, 14}

Recorrer hacia atrás

vector<int> v = {4, 2, 7};
int n = static_cast<int>(v.size());
for (int i = n - 1; i >= 0; --i) {
    cout << v[i] << ' ';
}
// Salida: 7 2 4

Si el vector está vacío, n - 1 vale -1 y el ciclo no entra.

Examinar vecinos

string s = "AABB";
int n = static_cast<int>(s.size());
int iguales = 0;
for (int i = 0; i + 1 < n; ++i) {
    if (s[i] == s[i + 1]) ++iguales;
}
// iguales vale 2

Repetir mientras cambia un valor

int n = 120;
int ceros = 0;
while (n > 0 && n % 10 == 0) {
    n /= 10;
    ++ceros;
}
// n vale 12 y ceros vale 1

Filtrar y terminar una búsqueda

vector<int> v = {-2, 3, 8, 10};
int primeroPar = -1;
for (int x : v) {
    if (x < 0) continue;
    if (x % 2 == 0) {
        primeroPar = x;
        break;
    }
}
// primeroPar vale 8