📊 Capítulo 04: Loops & std::ranges C++20
Especialização em Sistemas com C++
🗺️ O Pipeline Funcional e Preguiçoso do std::ranges (C++20)
flowchart LR
INPUT["Vetor Original: std::vector numeros{1, 2, 3, 4, 5, 6}"]
--> PIPE1["| std::views::filter([](int n){ return n % 2 == 0; })"]
--> PIPE2["| std::views::transform([](int n){ return n * 10; })"]
--> PIPE3["| std::views::take(2)"]
--> OUTPUT["Saída: 20, 40 (Calculado sob demanda em 0 alocações de memória!) ⚡"]
style INPUT fill:#ede7f6,stroke:#512da8,stroke-width:2px
style PIPE1 fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
style PIPE2 fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style PIPE3 fill:#fff9c4,stroke:#fbc02d,stroke-width:1.5px
style OUTPUT fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
🎯 Slide 1: Range-based for
std::vector<std::string> nomes{"Ada", "Bjarne", "Dennis"};
// Leitura rápida sem cópia:
for (const auto& nome : nomes) {
std::println("Dev: {}", nome);
}
// Modificação in-place:
for (auto& nome : nomes) {
nome += " [Engenharia]";
}
🎯 Slide 2: Composição Elegante com Pipes |
-
No C++ clássico, filtrar e transformar um vetor exigia loops manuais aninhados ou
std::copy_ifverborrágicos com iteradoresbegin()/end(). - Com
std::ranges::views, o código fica tão expressivo quanto Rust ou Stream API do Java, mas compilando para código de máquina nativo ultraotimizado!
🎯 Slide 3: std::views::iota
std::views::iota(1, 1000)gera uma sequência infinita ou limitada de inteiros sem alocar um único byte de vetor na memória RAM!
🔗 Navegação do Capítulo 04
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim