Menu
Coddy logo textTech

Bucle For basado en rangos

Parte de la sección Lógica y Flujo del Journey de C++ de Coddy. Lección 15 de 56.

Aunque los loop for tradicionales con índices funcionan bien para recorrer vector, C++ ofrece una solución más elegante: el loop for basado en range. Esta sintaxis moderna elimina la necesidad de gestionar manualmente los índices y hace que tu código sea más limpio y fácil de leer.

El loop basado en range gestiona automáticamente los detalles de la iteración por ti. En lugar de gestionar una variable de índice, simplemente especificas qué quieres hacer con each elemento:

std::vector<std::string> names = {"Alice", "Bob", "Charlie"};

for (const std::string& name : names) {
    std::cout << name << std::endl;
}

Este bucle hace exactamente lo mismo que el enfoque tradicional basado en índices, pero con una sintaxis mucho más sencilla. La variable name adopta automáticamente el valor de cada elemento del vector, uno a la vez.

Es posible que notes el símbolo & en la declaración del bucle: const std::string& name. En este contexto, & no significa «dirección de», como quizá hayas visto antes. Aquí declara name como una referencia (un alias) directamente a cada elemento del vector, en lugar de crear una copia de este. Piensa en ello como asignar un nuevo nombre al mismo fragmento de datos, de forma similar a usar un puntero al elemento, pero sin necesidad de desreferenciarlo dentro del cuerpo del bucle.

La palabra clave const es una medida de seguridad: evita que modifiques accidentalmente el elemento mediante el alias dentro del cuerpo del bucle. El alias en sí sigue avanzando hacia cada elemento nuevo en cada iteración. Es el contenido al que accedes mediante el alias lo que se mantiene constante, no el avance del bucle.

El loop for basado en range no solo es más legible, sino también más seguro: no hay riesgo de errores de índice, ya que no gestionas los índices manualmente. Funciona con cualquier contenedor que admita la iteración, lo que lo convierte en una herramienta versátil para procesar colecciones de datos en C++.

challenge icon

Desafío

Fácil

Crea un programa que demuestre el bucle for basado en rangos procesando una colección de nombres de ciudades y mostrándolos junto con su cantidad de caracteres.

Se proporcionarán las siguientes entradas:

  • Un entero n que representa la cantidad de ciudades
  • Después, n cadenas que representan los nombres de las ciudades

Tu programa debe:

  1. Crear un std::vector<std::string> llamado cities
  2. Usar push_back() para agregar cada uno de los n nombres de ciudades al vector
  3. Usar un bucle for basado en rangos para recorrer el vector
  4. Para cada ciudad del bucle, imprimir el nombre de la ciudad seguido de su longitud mediante el método .length()
  5. Después del bucle, imprimir la cantidad total de ciudades procesadas mediante el método .size() del vector

Usa el siguiente formato de salida exacto:

City: [city name] (Length: [number of characters])\nCity: [city name] (Length: [number of characters])\n...\nTotal cities processed: [total count]

El bucle for basado en rangos debe usar la sintaxis for (const std::string& city : cities) para recorrer cada elemento del vector. Usa city.length() para obtener la cantidad de caracteres de cada nombre de ciudad.

Pruébalo tú mismo

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    // Lee el número de ciudades
    int n;
    cin >> n;
    
    // Crea un vector para almacenar los nombres de las ciudades
    vector<string> cities;
    
    // Lee los nombres de las ciudades y añádelos al vector
    for (int i = 0; i < n; i++) {
        string city;
        cin >> city;
        cities.push_back(city);
    }
    
    // TODO: Escribe tu código debajo
    // Usa un bucle for basado en rangos para iterar a través del vector cities
    // Imprime cada ciudad con su longitud usando el formato especificado
    // After the loop, print the total number of cities processed
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de C++ online