0Pricing
C++ Academy · Aula

Introdução à biblioteca de intervalos do C++20

Use os algoritmos std::ranges, que recebem intervalos em vez de pares de iteradores

Introdução à biblioteca de intervalos do C++20 é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

Por que usar intervalos

A STL tradicional recebe pares de iteradores (v.begin(), v.end()). Os intervalos do C++20 recebem um único valor de intervalo e acrescentam composibilidade.

Incluindo intervalos

Inclua <ranges>. Os espaços de nomes são std::ranges para algoritmos e std::views para visões avaliadas sob demanda.

#include <ranges>
#include <algorithm>

Algoritmos para intervalos

Todo algoritmo padrão tem uma versão para intervalos que recebe um intervalo em vez de dois iteradores.

std::vector<int> v = {3, 1, 4, 1, 5};
std::ranges::sort(v);             // sort the whole range
auto it = std::ranges::find(v, 4);

Funções de projeção

Os algoritmos para intervalos aceitam uma projeção opcional — uma função aplicada a cada elemento antes da comparação. Isso evita escrever comparadores personalizados.

struct Person { std::string name; int age; };
std::vector<Person> people;
std::ranges::sort(people, {}, &Person::age);
// sort by age, default comparison

O que é um intervalo

Um intervalo é qualquer coisa que ofereça suporte a begin() e end(). Contêineres, arrays e, no C++20, qualquer tipo personalizado que exponha uma sentinela.

Sentinelas

O C++20 generaliza end() para uma sentinela — ela não precisa ser do mesmo tipo que o iterador. Isso é útil para fluxos de entrada e intervalos infinitos.

Visões: cadeias de intervalos avaliadas sob demanda

Uma visão é um intervalo sem propriedade que produz elementos conforme necessário. Componha-as com o operador de canal |.

auto squares = v
    | std::views::filter([](int x) { return x % 2 == 0; })
    | std::views::transform([](int x) { return x * x; });

for (int x : squares) std::cout << x << " ";

Avaliação preguiçosa

As visões não alocam memória nem são executadas até que sejam percorridas. filter | transform | take(5) produz apenas os 5 primeiros valores transformados — nada além disso.

Intervalos emprestados e tempo de vida

As visões tomam emprestado o intervalo de origem. Se a origem for destruída, a visão ficará pendente. Tenha cuidado com visões sobre temporários, embora o C++20 tenha adicionado proteções.

Avaliação imediata versus preguiçosa

Os algoritmos produzem resultados imediatamente (calculam agora). As visões são preguiçosas (calculam durante a iteração). Escolha com base na necessidade de materializar o resultado.

Desempenho

As cadeias avaliadas sob demanda evitam contêineres intermediários. O compilador frequentemente as otimiza como se fossem um único laço. Inspecione com godbolt para verificar.

Caminho de migração

Se você não puder usar o C++20, bibliotecas como range-v3, de Eric Niebler, fornecem o mesmo modelo no C++14/17. Vale a pena aprendê-lo hoje para facilitar a migração.

Verificação rápida

Qual é a principal vantagem dos intervalos do C++20 em relação ao estilo da STL baseado em pares de iteradores?

Recapitulação

Os intervalos do C++20 modernizam os algoritmos da STL: passe um único intervalo, use projeções e crie cadeias avaliadas sob demanda com visões. O operador de canal combina filtros, transformações e operações de obtenção em um código claro e declarativo.

Perguntas Frequentes

A aula “Introdução à biblioteca de intervalos do C++20” é grátis?

Sim — o texto completo de “Introdução à biblioteca de intervalos do C++20” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Introdução à biblioteca de intervalos do C++20”?

Use os algoritmos std::ranges, que recebem intervalos em vez de pares de iteradores Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Introdução à biblioteca de intervalos do C++20”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Categorias de iteradores: input, forward, bidirectional, random
  2. Padrões comuns de iteradores: begin, end, advance
  3. Introdução à biblioteca de intervalos do C++20
  4. Adaptadores de intervalos: views::filter, transform, take
← Voltar para C++ Academy