fcamuso

Corso C++ 37 - lambda

Jun 20th, 2026
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. //import std;
  2.  
  3. #include <vector>
  4. #include <string>
  5. #include <algorithm>
  6. #include <iterator>
  7. #include <print>
  8.  
  9.  
  10. struct Lago {
  11.     std::string nome{};
  12.     std::string regione{};
  13.     double superficie_km2{};
  14. };
  15.  
  16. auto predicato(const Lago& elemento) -> bool
  17. {
  18.     return elemento.superficie_km2 > 100;
  19. }
  20.  
  21. auto scegli_calcola_sconto(const std::string& mese) -> double(*)(double)
  22. {
  23.     if (mese=="febbraio")
  24.         return [] (double costo) -> double {return costo/10;};
  25.  
  26.     // altri mesi
  27.  
  28.     return [](double costo) -> double {return 0; };
  29. }
  30.  
  31. auto main() -> int
  32. {
  33.     std::vector<Lago> laghi = {
  34.         {"Lago di Garda", "Lombardia", 370.0},
  35.         {"Lago Maggiore", "Piemonte", 212.0},
  36.         {"Lago di Como", "Lombardia", 146.0},
  37.         {"Lago di Idro", "Lombardia", 10.9},
  38.         {"Lago di Biandronno", "Lombardia", 0.5}
  39.  
  40.         //ecc...
  41.     };
  42.  
  43.  
  44.  
  45.     std::vector<Lago> laghi_grandi; //superficie > 100km2
  46.     double soglia = 200;
  47.  
  48.     std::copy_if(laghi.begin(), laghi.end(),std::back_inserter(laghi_grandi),
  49.                  predicato);
  50.  
  51.     std::ranges::copy_if(laghi, std::back_inserter(laghi_grandi),
  52.     [soglia] (const Lago& ele) -> bool {return ele.superficie_km2 > soglia; } );
  53.    
  54.     auto f = [] -> int {return 6;};
  55.     std::println("{}", f());
  56.    
  57.     double prezzo = 200;
  58.     auto prezzo_scontato = prezzo - scegli_calcola_sconto("febbraio")(prezzo);
  59.     std::println("Prezzo scontato per febbraio: {}", prezzo_scontato );
  60.  
  61.  
  62.  
  63.  
  64.     for (auto ele: laghi_grandi)
  65.         std::println("{} {} {}", ele.nome, ele.regione, ele.superficie_km2);
  66.    
  67. }
  68.  
Advertisement
Add Comment
Please, Sign In to add comment