fcamuso

Corso C++ 23 - lezione 29

May 15th, 2026
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.75 KB | None | 0 0
  1.  
  2. #pragma region IntelliSense_Fix
  3. #ifdef __INTELLISENSE__
  4. #include <print>
  5. #include <string>
  6. #include <chrono>
  7. #endif
  8. #pragma endregion
  9.  
  10. import std;
  11.  
  12.  
  13.  
  14. auto oggi() -> std::string {
  15.     auto time_point_100ns = std::chrono::system_clock::now();
  16.     auto time_point_gg = std::chrono::floor<std::chrono::days>(time_point_100ns);
  17.     return std::format("{:%d/%m/%Y}", time_point_gg );
  18. }
  19.  
  20. struct Movimento {
  21.     std::string data{ oggi() };
  22.     int importo{};
  23. };
  24.  
  25. auto stampa_vector(const std::vector<Movimento> &vec) -> void
  26. {
  27.     for (auto mov : vec)
  28.     {
  29.         std::println("Data: {} - Importo: {}", mov.data, mov.importo);
  30.     }
  31. }
  32.  
  33. auto prepara_vector(std::vector<Movimento> &vec)
  34. {
  35.     if (!vec.empty()) //vec.size()>0     empty() sempre O(1)
  36.     {
  37.         vec.front().data = "1-1-2026";  //vec[0].data = ecc
  38.         vec.front().importo = 1;
  39.  
  40.         vec.back().data = "31-12-2026";  //vec[vec.size()-1]
  41.         vec.back().importo = 365;
  42.  
  43.     }
  44.  
  45.     if (vec.size() >= 10)
  46.     {
  47.         vec[9].data = "10-1-2026";
  48.         vec[9].importo = 10;
  49.     }
  50.  
  51.    
  52.  
  53. }
  54.  
  55. auto main() -> int
  56. {
  57.     //CREAZIONE
  58.     // vector con zero elementi
  59.     //std::vector<Movimento> movimenti{};
  60.    
  61.     //con lista di inizializzazione non vuota
  62.     std::vector<Movimento> movimenti{
  63.            {},
  64.            {"12-01-2026", 340},
  65.            Movimento{ "13-1-26", -800},
  66.            Movimento{.data = "14-1-26", .importo = -200}
  67.     };
  68.  
  69.     //AGGIUNGERE ELEMENTI
  70.     movimenti.push_back(Movimento{"09-07-2026", -180 });
  71.     movimenti.push_back({"09-07-2026", -360});
  72.     movimenti.emplace_back("", 100);
  73.  
  74.     Movimento m{ "ULTIMO", -540 };
  75.     movimenti.push_back(m);
  76.  
  77.    
  78.     //auto [data, importo] = movimenti.emplace_back("09-07-2027", 300);
  79.     //std::println("Il vector contiene ora {} elementi", movimenti.size());
  80.     //std::println("Il vector ha ora una capienza di {} elementi", movimenti.capacity());
  81.  
  82.     //movimenti = std::vector<Movimento>();
  83.     //movimenti.resize(10000);
  84.  
  85.     //for (int i = 0, old_capacity=movimenti.capacity(); i < 10000; i++)
  86.     //{
  87.     //  movimenti.push_back({});
  88.     //  if (old_capacity < movimenti.capacity())
  89.     //  {
  90.     //      std::println("N. elementi: {}. Vecchia capacity: {} - nuova capacity: {}",
  91.     //          movimenti.size(), old_capacity, movimenti.capacity());
  92.  
  93.     //      old_capacity = movimenti.capacity();
  94.     //  }
  95.     //}
  96.  
  97.     //movimenti.resize(100);
  98.     //std::println("N. elementi: {}. Capacity: {}",
  99.     //  movimenti.size(), movimenti.capacity());
  100.  
  101.     //INSERIMENTO
  102.     movimenti.insert(movimenti.begin(), {"PRIMO", 100}); //movimenti[0]
  103.     movimenti.insert(movimenti.begin() + 2, { "TERZO", 100 }); //movimenti[2]
  104.  
  105.     //diminuisco dopo le prove il numero di elementi clonati per non avere stampe troppo lunghe
  106.     movimenti.insert(movimenti.begin() + 2, 5, { "CLONI DI TERZO", 10 });
  107.  
  108.     movimenti.insert(movimenti.end() - 2, movimenti.begin(), movimenti.begin() + 5);
  109.  
  110.     movimenti.insert(movimenti.begin(), { {"1", 0}, {"2", 0}, {"3", 0} });
  111.  
  112.     stampa_vector(movimenti);
  113.  
  114.     std::println("{}", std::string(50, '-'));
  115.  
  116.     auto it_prima = movimenti.begin();
  117.     std::println("Con iteratore prima dell'espansione{}", it_prima->data);
  118.  
  119.      //disabilito inserimento dei 500 movimenti per non avere troppi elementi nel vector
  120.     /*auto it =
  121.         movimenti.insert(
  122.             movimenti.begin() + 2,
  123.             500,
  124.             { "BLOCCO INSERITO", {}}
  125.         );
  126.  
  127.     std::println("Data elemento che precede il blocco {}", (it - 1) -> data);
  128.     std::println("Stringa del primo elemento elemento del blocco {}", it->data);*/
  129.  
  130.     //ora it_prima non è piu valido
  131.     //std::println("Con iteratore  invalidato{}", it_prima->data);
  132.  
  133.    
  134.     //stampa_vector(movimenti);
  135.  
  136.     //movimenti.resize(200);
  137.     //std::println("size {} =  capacity {}", movimenti.size(), movimenti.capacity());
  138.  
  139.     //movimenti.shrink_to_fit();
  140.     //std::println("size {} =  capacity {}", movimenti.size(), movimenti.capacity());
  141.  
  142.  
  143.     /*movimenti.emplace(movimenti.begin() + 2, "data_emplace", 2000);
  144.     stampa_vector(movimenti);*/
  145.  
  146.     //modifico alcuni dati per evidenziare i movimenti su cui agiro con i prossimi comandi
  147.     //nel caso avessi bisogno di 'resettare' il vector per altre prove uso una funzione
  148.     prepara_vector(movimenti);
  149.     stampa_vector(movimenti);
  150.  
  151.     //ACCESSO AGLI ELEMENTI
  152.     // - front() vedi funzione prepara_vector
  153.     // - back() vedi funzione prepara_vector
  154.     movimenti[10].importo = 999;
  155.     movimenti.at(10).data = "4-4-1971";
  156.  
  157.  
  158.     try {
  159.         movimenti.at(100).importo = 222;
  160.     }
  161.     catch (...)
  162.     {
  163.         std::println("Problema!");
  164.     }
  165.  
  166.     auto i_dati = movimenti.data();
  167.     std::println("{}", i_dati[9].data);
  168.  
  169.     //SCANSIONE ELEMENTI
  170.  
  171.     std::println("{}", std::string(50, '*'));
  172.  
  173.     //begin()  end()
  174.     for (auto it = movimenti.cbegin(); it != movimenti.cend(); it++)
  175.     {
  176.         //it->data = "lsdjffld"; NO! iteratore COSTANTE
  177.  
  178.         std::println("{} {}", it->data, it->importo);
  179.     }
  180.  
  181.     std::println("{}", std::string(50, '='));
  182.  
  183.     for (auto it = movimenti.crbegin(); it != movimenti.crend(); it++)
  184.     {
  185.         //it->data = "lsdjffld"; NO! iteratore COSTANTE
  186.  
  187.         std::println("{} {}", it->data, it->importo);
  188.     }
  189.  
  190.  
  191.     //ranges
  192.     for (const auto &mov: movimenti)
  193.     {
  194.         std::println("{} {}", mov.data, mov.importo);
  195.     }
  196.  
  197.     //LEGACY, NON USARE
  198.     for(std::size_t i=0; i<movimenti.size(); i++)
  199.     {
  200.         std::println("{} {}", movimenti[i].data, movimenti[i].importo);
  201.     }
  202.  
  203.  
  204.     //ELIMINARE ELEMENTI
  205.     system("cls");
  206.     std::println("{}", std::string(50, '|'));
  207.     movimenti.pop_back();
  208.     stampa_vector(movimenti);
  209.     std::println("{}", std::string(50, '|'));
  210.  
  211.     auto it = movimenti.erase(movimenti.begin(), movimenti.begin() + 3);
  212.     stampa_vector(movimenti);
  213.  
  214.     std::println("{}", it->data);
  215.  
  216.     std::vector<int> v = { 1, 3, 2, 3, 4, 3, 5 };
  217.     v.erase(std::remove(v.begin(), v.end(), 3), v.end()); //[1, 2, 5, 3, 5]
  218.  
  219.     std::erase(v, 3);
  220.  
  221.     std::erase_if(v, [](int n) { return n % 2 == 0; });
  222.  
  223.     std::vector<Movimento> movimenti_copia(movimenti);
  224.     movimenti_copia.erase(movimenti_copia.begin(), movimenti_copia.begin() + 10);
  225.     system("cls");
  226.     stampa_vector(movimenti_copia);
  227.  
  228.     movimenti.swap(movimenti_copia);
  229.     stampa_vector(movimenti);
  230.     std::println("{}", std::string(50, '-'));
  231.     stampa_vector(movimenti_copia);
  232.  
  233.  
  234.     //CARATTERISTICHE MODERNE
  235.     std::list<Movimento> lista_movimenti{
  236.            {},
  237.            {"12-01-2026", 340},
  238.            Movimento{ "13-1-26", -800},
  239.            Movimento{.data = "14-1-26", .importo = -200}
  240.     };
  241.  
  242.     std::vector<Movimento> movimenti3(std::from_range, lista_movimenti);
  243.  
  244.     movimenti3.assign_range(lista_movimenti);
  245.     movimenti.append_range(lista_movimenti);
  246.     movimenti.insert_range(movimenti.begin() + 5, lista_movimenti);
  247.  
  248.     //
  249.     //
  250.     ////std::vector<Movimento> movimenti2(10);
  251.     //std::vector<Movimento> movimenti2(10, {"1-1-2020", 500});
  252.     //for (auto [data, importo] : movimenti2)
  253.     //{
  254.     //  std::println("Data: {} - Importo: {}", data, importo);
  255.     //}
  256.  
  257.  
  258.     //copiando da un altra collezione
  259.     //array tradizionale di movimenti
  260.     //Movimento mov2[]{ {"1-1-26", 200}, {"1-1-26", 300}, {"1-1-26", -300}, {"2-1-26", 1200} };
  261.  
  262. }
  263.  
Advertisement
Add Comment
Please, Sign In to add comment