range-v3 para C++: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao range-v3: o que é e para que serve

\n\n

A biblioteca range-v3 é uma biblioteca moderna e poderosa para trabalhar com sequências de dados em C++, desenvolvida por Eric Niebler. Ela foi precursora e protótipo para a biblioteca padrão C++20 Ranges. O range-v3 fornece ferramentas convenientes, expressivas e seguras para processar coleções, vetores, listas e quaisquer outros objetos iteráveis, utilizando o conceito de "avaliação preguiçosa" e composição de algoritmos.

\n\n

Para que serve esta biblioteca? Os algoritmos tradicionais da STL (std::transform, std::copy_if, etc.) trabalham com iteradores, o que muitas vezes resulta em código verboso e difícil de ler. O range-v3 resolve esse problema permitindo trabalhar com intervalos (ranges) inteiros como objetos únicos. Você pode encadear operações (pipeline) sem criar contêineres temporários e escrever código que se parece com uma sequência de etapas, em vez de chamadas de funções aninhadas.

\n\n

Principais vantagens:

\n
    \n
  • Expressividade: o código se torna uma descrição declarativa do que precisa ser feito, e não de como fazer.
  • \n
  • Preguiça: muitas operações (filtragem, transformação) são executadas apenas quando realmente necessário, melhorando o desempenho.
  • \n
  • Composição: fácil combinar diferentes algoritmos usando o operador | (pipe).
  • \n
  • Segurança: menos erros relacionados a estouro de limites e uso incorreto de iteradores.
  • \n
  • Compatibilidade: funciona com qualquer contêiner STL e tipos personalizados que suportem iteração.
  • \n
\n\n

Instalação do range-v3

\n\n

Ao contrário de Python ou JavaScript, C++ não possui um gerenciador de pacotes único como pip ou npm. No entanto, o range-v3 é uma biblioteca header-only (consiste apenas em arquivos de cabeçalho), o que torna sua instalação muito simples.

\n\n

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

\n

Vcpkg é um gerenciador de pacotes multiplataforma para C++.

\n
# Instale o vcpkg, se ainda não o fez\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh  # ou bootstrap-vcpkg.bat para Windows\n\n# Instale o range-v3\n./vcpkg install range-v3\n\n# Conecte no projeto (CMake):\n# find_package(range-v3 CONFIG REQUIRED)\n# target_link_libraries(my_project PRIVATE range-v3::range-v3 range-v3::meta)
\n\n

Método 2: Conan

\n

Conan é outro gerenciador de pacotes popular.

\n
# Instale o Conan\npip install conan\n\n# Adicione ao arquivo conanfile.txt:\n[requires]\nrange-v3/0.12.0\n\n[generators]\ncmake\n\n# Em seguida, no CMakeLists.txt:\n# find_package(range-v3 CONFIG REQUIRED)\n# target_link_libraries(my_project PRIVATE range-v3::range-v3 range-v3::meta)
\n\n

Método 3: Instalação manual (baixar e copiar)

\n

Como a biblioteca é header-only, você pode simplesmente baixá-la do GitHub e adicionar o caminho para include no seu projeto.

\n
git clone https://github.com/ericniebler/range-v3.git\n# Em seguida, nas configurações do compilador, especifique:\n# -I /caminho/para/range-v3/include
\n\n

Método 4: CMake FetchContent (abordagem moderna)

\n

Este método baixa automaticamente a biblioteca durante a compilação.

\n
include(FetchContent)\nFetchContent_Declare(\n  range-v3\n  GIT_REPOSITORY https://github.com/ericniebler/range-v3.git\n  GIT_TAG 0.12.0\n)\nFetchContent_MakeAvailable(range-v3)\n\ntarget_link_libraries(my_project PRIVATE range-v3::range-v3 range-v3::meta)
\n\n

Início rápido: primeiro exemplo

\n\n

Vamos escrever um programa simples que demonstra os principais recursos do range-v3. Criaremos um vetor de números, filtraremos os pares, multiplicaremos por 2 e exibiremos o resultado.

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

Recommendations