EPC úloha 2: statický vektor

Varování (Termín)

Konec 12. týdne semestru, podle kalendáře neděle 13. 12. 2026. Datum si ověř. Úloha je za 10 bodů a soupis obsahuje body k pochopení, ne řešení.

Co máš odevzdat

Třídní šablonu epc::vector<T, N> s pevnou kapacitou NN, úložištěm uvnitř objektu a podporou přesunu.

Co musíš pochopit

  1. Úložiště je v objektu: pole unsigned char nebo std::byte s alignas(T). Jiné členské proměnné než úložiště a počet prvků nesmíš mít.
  2. Přesun vektoru nejde provést převzetím ukazatele. Přesouvají se jednotlivé prvky.
  3. std::move u typu bez přesunu vede na kopii. Díky tomu stačí jeden kód pro tři druhy typů.
  4. Plný vektor vyhazuje std::bad_alloc a zůstává beze změny.
  5. Proč přesun a swap nejsou noexcept: u kopírovatelného typu se kopíruje a kopie může selhat.

Co si zopakovat

Co Kde
Hodnotové kategorie a reference kapitola Hodnoty, reference a přesun
Přesouvací speciální funkce ni_epc_06 strany 17–35
Moved-from stav ni_epc_06 strany 25–26
Self-assignment při přesunu ni_epc_06 strany 28–31
Zarovnání kapitola Objekty a úložiště

Doporučené pořadí

  1. Zkopíruj kostru z úlohy 1 bez dynamické paměti.
  2. Úložiště, data, capacity, size.
  3. push_back kopií a přesunem.
  4. Kopírovací a přesouvací konstruktor.
  5. pop_back, clear, statické reserve.
  6. Oba přiřazovací operátory.
  7. swap pro vektory různé velikosti.
  8. Testy pro všechny tři druhy typů.

Na co si dát pozor

Jak testovat

Potřebuješ tři typy:

Přidej typ s alignas(64) a kontrolu, že data() je zarovnaná. Měř, že se u druhého typu nikde zbytečně nekopíruje.

Kontrola před odevzdáním

Zdroje

  • NI-EPC, zadání Úloha 2
  • ni_epc_02: zarovnání strany 13–20
  • ni_epc_05: hodnotové kategorie strany 8–11, reference 12–25
  • ni_epc_06: přesun strany 17–35
  • ni_epc_10: std::move a move_if_noexcept strany 12–19