Hola de nuevo La traducción del siguiente material fue preparada específicamente para los estudiantes del curso
"C ++ Developer" , clases en las que comenzará el 27 de junio.

La biblioteca Ranges fue adoptada en C ++ 20 en una reunión del comité estándar en San Diego en noviembre pasado. La biblioteca proporciona componentes para procesar rangos de valores diseñados para simplificar nuestro código. Desafortunadamente, la biblioteca Ranges no está muy bien documentada, lo que hace que sea más difícil de entender para aquellos que desean dominarla. Esta publicación está destinada a proporcionar ejemplos de código escrito usando y sin rangos.
La implementación de la biblioteca Ranges de Eric Niebler está disponible
aquí . Funciona con Clang 3.6.2 o posterior, gcc 5.2 o posterior y VC ++ 15.9 o posterior. Los ejemplos de código a continuación se han escrito y probado con las últimas versiones de compiladores. Vale la pena señalar que estos ejemplos son implementaciones típicas y no son necesariamente las únicas soluciones que puede encontrar.
Aunque el espacio de nombres estándar para la biblioteca de Rangos es
std::ranges
, en esta implementación actual de la biblioteca es
ranges::v3
.
Los siguientes alias de espacio de nombres se utilizan en los ejemplos a continuación:
namespace rs = ranges::v3; namespace rv = ranges::v3::view; namespace ra = ranges::v3::action;
Además, para simplificar, nos referiremos a los siguientes objetos, funciones y lambdas:
std::string to_roman(int value) { std::vector<std::pair<int, char const*>> roman { { 1000, "M" },{ 900, "CM" }, { 500, "D" },{ 400, "CD" }, { 100, "C" },{ 90, "XC" }, { 50, "L" },{ 40, "XL" }, { 10, "X" },{ 9, "IX" }, { 5, "V" },{ 4, "IV" }, { 1, "I" } }; std::string result; for (auto const & [d, r]: roman) { while (value >= d) { result += r; value -= d; } } return result; } std::vector<int> v{1,1,2,3,5,8,13,21,34}; auto print_elem = [](auto const e) {std::cout << e << '\n'; }; auto is_even = [](auto const i) {return i % 2 == 0; };
APDATE : Me gustaría agradecer a Eric Nibler y a todos los que comentaron a continuación, con sugerencias para estos ejemplos de código. Actualicé algunos en función de sus comentarios.Imprima todos los elementos de la gama:
Imprima todos los elementos del rango en el orden inverso:
Imprima solo los elementos pares del rango, pero en el orden inverso:
Omita los dos primeros elementos del rango e imprima solo los pares de los siguientes tres:
Imprima números del 101 al 200:
Imprima todos los números romanos del 101 al 200. Para convertir un número al número romano correspondiente, use la función
to_roman()
que se muestra arriba.
Imprima los números romanos de los últimos tres números divisibles por 7 en el rango [101, 200], en orden inverso.
Cree un rango de cadenas que contenga los números romanos de los últimos tres números que sean múltiplos de 7 en el rango [101, 200], en orden inverso.
Cambie el rango sin clasificar para que conserve solo valores únicos, pero en el orden inverso.
Elimine los dos valores más pequeños y los dos más grandes del rango y deje el resto ordenado en el segundo rango.
Combina todas las filas en un rango dado en un solo valor.
Cuente la cantidad de palabras (separadas por un espacio) en el texto.
¿Te fue útil el artículo? Escribe en los comentarios.