Olá novamente. A tradução do material a seguir foi preparada especificamente para os alunos do curso
"Desenvolvedor C ++" , cujas aulas começarão em 27 de junho.

A biblioteca Ranges foi adotada em C ++ 20 em uma reunião do comitê padrão em San Diego em novembro passado. A biblioteca fornece componentes para o processamento de intervalos de valores projetados para simplificar nosso código. Infelizmente, a biblioteca Ranges não está muito bem documentada, o que dificulta o entendimento para quem deseja dominá-la. Esta publicação pretende fornecer exemplos de código escrito usando e sem intervalos.
A implementação da biblioteca de Eric Niebler Ranges está disponível
aqui . Ele funciona com o Clang 3.6.2 ou posterior, gcc 5.2 ou posterior e VC ++ 15.9 ou posterior. Os exemplos de código abaixo foram escritos e testados com as versões mais recentes dos compiladores. Vale ressaltar que esses exemplos são implementações típicas e não são necessariamente as únicas soluções que você pode apresentar.
Embora o espaço de nomes padrão para a biblioteca Ranges seja
std::ranges
, nessa implementação atual da biblioteca, ele é
ranges::v3
.
Os aliases de namespace a seguir são usados nos exemplos abaixo:
namespace rs = ranges::v3; namespace rv = ranges::v3::view; namespace ra = ranges::v3::action;
Além disso, para simplificação, vamos nos referir aos seguintes objetos, funções e 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 : Gostaria de agradecer a Eric Nibler e a todos os outros que comentaram abaixo, com sugestões para esses exemplos de código. Eu atualizei alguns com base em seus comentários.Imprima todos os elementos do intervalo:
Imprima todos os elementos do intervalo na ordem inversa:
Imprima apenas os elementos pares do intervalo, mas na ordem inversa:
Pule os dois primeiros elementos do intervalo e imprima apenas pares dos três seguintes:
Imprima números de 101 a 200:
Imprima todos os números romanos de 101 a 200. Para converter um número no número romano correspondente, use a função
to_roman()
mostrada acima.
Imprima os algarismos romanos dos três últimos números divisíveis por 7 no intervalo [101, 200], na ordem inversa.
Crie um intervalo de cadeias contendo os algarismos romanos dos últimos três números que são múltiplos de 7 no intervalo [101, 200], na ordem inversa.
Altere o intervalo não classificado para que ele retenha apenas valores exclusivos, mas na ordem inversa.
Exclua os dois menores e os dois maiores valores do intervalo e deixe o restante ordenado no segundo intervalo.
Combine todas as linhas em um determinado intervalo em um único valor.
Conte o número de palavras (separadas por um espaço) no texto.
O artigo foi útil para você? Escreva nos comentários.