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 comparisonO 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
- Categorias de iteradores: input, forward, bidirectional, random
- Padrões comuns de iteradores: begin, end, advance
- Introdução à biblioteca de intervalos do C++20
- Adaptadores de intervalos: views::filter, transform, take