Bucle for basado en rangos con contenedores
Itere limpiamente sobre contenedores con la sintaxis de for basado en rangos de C++11.
Bucle for basado en rangos con contenedores es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
El bucle moderno
C++11 introdujo el bucle for basado en rangos: permite iterar sobre cualquier contenedor sin índices ni iteradores explícitos. Es más claro y resulta más difícil equivocarse.
std::vector<int> v = {1, 2, 3, 4, 5};
for (int x : v) {
std::cout << x << " ";
}Por valor
El ejemplo anterior copia cada elemento en x. Está bien para tipos cuyo coste es bajo, como int, pero resulta costoso con objetos grandes.
Por referencia constante
Para tipos no triviales, utilice const auto& para evitar copias e indicar que no modificará los elementos.
std::vector<std::string> names = {"Ada", "Bob"};
for (const auto& name : names) {
std::cout << name << "\n";
}Por referencia para modificar
Utilice una referencia normal para modificar los elementos directamente.
std::vector<int> v = {1, 2, 3};
for (auto& x : v) {
x *= 10;
}
// v is now {10, 20, 30}auto para deducir el tipo
Deje que el compilador deduzca el tipo del elemento. Con cadenas, vectores de estructuras y mapas, esto evita escribir mucho código.
Iterar sobre un mapa
Cada elemento es un std::pair<const Key, Value>. Utilice descomposición estructurada (C++17) para obtener un código más claro.
std::map<std::string, int> ages = {{"Ada",30},{"Bob",24}};
for (const auto& [name, age] : ages) {
std::cout << name << ": " << age << "\n";
}Iterar sobre cadenas
Un std::string es un contenedor de char.
std::string s = "hello";
for (char c : s) {
std::cout << c << " ";
}Bucles sobre listas de inicialización
Puede iterar directamente sobre una lista delimitada por llaves mediante un bucle basado en rangos.
for (int n : {1, 2, 4, 8, 16}) {
std::cout << n << " ";
}Bucle basado en rangos inverso
El for basado en rangos estándar avanza hacia delante. Para iterar en sentido inverso, utilice std::ranges::reverse_view (C++20) o iteradores inversos manuales.
#include <ranges>
for (auto x : v | std::views::reverse) {
std::cout << x;
}Limitaciones
El for basado en rangos no puede:
- Conocer el índice actual sin un contador independiente
- Omitir elementos ni modificar el contenedor durante la iteración
- Iterar sobre dos contenedores en paralelo (utilice un for normal o zip)
Tipos personalizados en un for basado en rangos
Para que su propia clase funcione con un for basado en rangos, proporcione miembros begin() y end(), o funciones libres que devuelvan iteradores.
Comprobación rápida
¿Qué forma de bucle for basado en rangos modifica los elementos del contenedor?
Resumen
El for basado en rangos es la forma más clara de iterar. Utilice const auto& de forma predeterminada, auto& para modificar elementos y descomposición estructurada para separar pares y tuplas.
Preguntas frecuentes
¿La lección «Bucle for basado en rangos con contenedores» es gratis?
Sí — el texto completo de «Bucle for basado en rangos con contenedores» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Bucle for basado en rangos con contenedores»?
Itere limpiamente sobre contenedores con la sintaxis de for basado en rangos de C++11. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Bucle for basado en rangos con contenedores»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Ramificaciones: if-else, ternario y switch-case
- Patrones de bucle: for, while y do-while
- Bucle for basado en rangos con contenedores
- Retornos anticipados, break, continue y goto