Bucle for basado en rango en C++
-
Utilice el bucle
for
basado en rangos para imprimir elementos destd::map
en C++ -
Utilice el bucle
for
basado en rangos para imprimir miembros destruct
en C++
Este artículo demostrará varios métodos sobre cómo utilizar un bucle for
basado en rangos en C++.
Utilice el bucle for
basado en rangos para imprimir elementos de std::map
en C++
El bucle for
basado en rangos es un equivalente más legible del bucle for
normal. Se puede utilizar para recorrer el array o cualquier otro objeto que tenga funciones miembro begin
y end
. Tenga en cuenta que usamos la palabra clave auto
y la referencia al elemento para acceder a él. En este caso, el item
se refiere al elemento único de std::map
, que resulta ser del tipo std::pair
. Por lo tanto, acceder a los pares clave-valor requiere una notación especial de puntos para acceder a ellos utilizando palabras clave first
/second
.
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
int main() {
map<int, string> fruit_map = {{
1,
"Apple",
},
{
2,
"Banana",
},
{
3,
"Mango",
},
{
4,
"Cocoa",
}};
for (auto &item : fruit_map) {
cout << "[" << item.first << "," << item.second << "]\n";
}
return EXIT_SUCCESS;
}
Producción :
[1,Apple]
[2,Banana]
[3,Mango]
[4,Cocoa]
Alternativamente, un bucle basado en rango puede acceder a elementos usando notación de enlace estructurado y hacer que el bloque de código sea más conciso. En el siguiente ejemplo, demostramos dicho uso de enlace para acceder a pares std::map
.
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
int main() {
map<int, string> fruit_map = {{
1,
"Apple",
},
{
2,
"Banana",
},
{
3,
"Mango",
},
{
4,
"Cocoa",
}};
for (const auto& [key, val] : fruit_map) {
cout << "[" << key << "," << val << "]\n";
}
return EXIT_SUCCESS;
}
Producción :
[1,Apple]
[2,Banana]
[3,Mango]
[4,Cocoa]
Utilice el bucle for
basado en rangos para imprimir miembros de struct
en C++
El enlace estructurado puede ser extremadamente útil cuando los elementos atravesados representan estructuras relativamente más grandes con varios miembros de datos. Como se muestra en el siguiente código de ejemplo, estos miembros se declaran como una lista de identificadores y luego se hace referencia a ellos directamente sin la notación struct.member
. Tenga en cuenta que la mayoría de los contenedores STL se pueden atravesar utilizando el bucle for
basado en rangos.
#include <iostream>
#include <list>
using std::cin;
using std::cout;
using std::endl;
using std::list;
using std::string;
struct Person {
string name;
string surname;
int age;
};
int main() {
list<Person> persons = {{"T", "M", 11},
{"R", "S", 23},
{"J", "R", 43},
{"A", "C", 60},
{"D", "C", 97}};
for (const auto& [n, s, age] : persons) {
cout << n << "." << s << " - " << age << " years old" << endl;
}
return EXIT_SUCCESS;
}
Producción :
T.M - 11 years old
R.S - 23 years old
J.R - 43 years old
A.C - 60 years old
D.C - 97 years old
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook