range-v3 para C++: guía completa con ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a range-v3: qué es y para qué sirve

La librería range-v3 es una potente y moderna biblioteca para trabajar con secuencias de datos en C++, desarrollada por Eric Niebler. Fue la precursora y el prototipo de la librería estándar de rangos de C++20. range-v3 proporciona herramientas cómodas, expresivas y seguras para procesar colecciones, vectores, listas y cualquier otro objeto iterable, utilizando el concepto de "evaluación perezosa" y composición de algoritmos.

¿Para qué sirve esta librería? Los algoritmos tradicionales de la STL (std::transform, std::copy_if, etc.) trabajan con iteradores, lo que a menudo genera código verboso y difícil de leer. range-v3 resuelve este problema permitiéndote trabajar con rangos completos como si fueran objetos únicos. Puedes encadenar operaciones en tuberías (pipelines) sin crear contenedores temporales y escribir código que parece una secuencia de pasos, en lugar de llamadas a funciones anidadas.

Principales ventajas:

  • Expresividad: el código se asemeja a una descripción declarativa de lo que se quiere hacer, no de cómo hacerlo.
  • Evaluación perezosa: muchas operaciones (filtrado, transformación) solo se ejecutan cuando es realmente necesario, lo que mejora el rendimiento.
  • Composición: es fácil combinar diferentes algoritmos usando el operador | (pipe).
  • Seguridad: menos errores relacionados con desbordamientos de límites y mal uso de iteradores.
  • Compatibilidad: funciona con cualquier contenedor de la STL y tipos personalizados que soporten iteración.

Instalación de range-v3

A diferencia de Python o JavaScript, C++ no tiene un gestor de paquetes único como pip o npm. Sin embargo, range-v3 es una librería header-only (solo consta de archivos de cabecera), lo que hace que su instalación sea muy sencilla.

Método 1: Vcpkg (recomendado para Windows, Linux, macOS)

Vcpkg es un gestor de paquetes multiplataforma para C++.

# Instala vcpkg si aún no lo has hecho
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh  # o bootstrap-vcpkg.bat en Windows

# Instala range-v3
./vcpkg install range-v3

# Conéctalo en tu proyecto (CMake):
# find_package(range-v3 CONFIG REQUIRED)
# target_link_libraries(mi_proyecto PRIVATE range-v3::range-v3 range-v3::meta)

Método 2: Conan

Conan es otro gestor de paquetes popular.

# Instala Conan
pip install conan

# Añade al archivo conanfile.txt:
[requires]
range-v3/0.12.0

[generators]
cmake

# Luego en CMakeLists.txt:
# find_package(range-v3 CONFIG REQUIRED)
# target_link_libraries(mi_proyecto PRIVATE range-v3::range-v3 range-v3::meta)

Método 3: Instalación manual (descargar y copiar)

Como la librería es header-only, puedes descargarla directamente desde GitHub y añadir la ruta de include a tu proyecto.

git clone https://github.com/ericniebler/range-v3.git
# Luego en la configuración del compilador indica:
# -I /ruta/a/range-v3/include

Método 4: CMake FetchContent (enfoque moderno)

Este método descarga la librería automáticamente durante la compilación.

include(FetchContent)
FetchContent_Declare(
  range-v3
  GIT_REPOSITORY https://github.com/ericniebler/range-v3.git
  GIT_TAG 0.12.0
)
FetchContent_MakeAvailable(range-v3)

target_link_libraries(mi_proyecto PRIVATE range-v3::range-v3 range-v3::meta)

Inicio rápido: primer ejemplo

Escribamos un programa sencillo que demuestre las capacidades básicas de range-v3. Crearemos un vector de números, filtraremos los pares, los multiplicaremos por 2 y mostraremos el resultado.

#include <iostream>
#include <vector>
#include <range/v3/all.hpp>

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5, 6, 7, 8,                    

Recommendations