EPC úloha 1: vektor s oddělenou alokací

Varování (Termín)

Konec 12. týdne semestru, podle kalendáře neděle 13. 12. 2026. Původní termín na konci 4. cvičení je v zadání přeškrtnutý. 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> s rozhraním ze zadání. Oproti cvičné 0. úloze nesmí T potřebovat výchozí konstruktor ani (kromě kopírovacího přiřazení vektoru) přiřazení.

Co musíš pochopit

  1. Kapacita a velikost. V úložišti existuje jen size() objektů.
  2. Čtyři mechanizmy ze zadání: operator new, placement new, volání destruktoru, operator delete.
  3. Strong exception guarantee u reserve a push_back: po výjimce je vektor úplně beze změny.
  4. Pořadí kroků realokace: nové úložiště, kopie, zrušení starých prvků, dealokace, přenastavení proměnných.
  5. Self-assignment a zbytečná alokace u kopírovacího přiřazení. Alokovat smíš jen tehdy, když je to nutné.

Co si zopakovat

Co Kde
Oddělené vytvoření objektu kapitola Objekty a úložiště, ni_epc_02 strany 28–31
uninitialized_copy a výjimky ni_epc_03 strany 13–17
Kopírovací konstruktor vektoru ni_epc_04 strany 43–48
Záruky výjimek kapitola Výjimky a RAII, ni_epc_10 strany 9–12
Chyba v kopírovacím konstruktoru cvičení 3, úloha 3
Zbytečné větvení v push_back cvičení 3, úloha 4

Doporučené pořadí

  1. Rozhraní a prázdné tělo, ať projde překlad.
  2. Konstruktor, destruktor, capacity, size, data, operator[].
  3. reserve. Na něm stojí zbytek.
  4. push_back s pravidlem růstu 0 → 1 → 2 → 4.
  5. pop_back, clear.
  6. Kopírovací konstruktor.
  7. swap.
  8. Kopírovací přiřazení.
  9. Testy výjimek a sanitizery.

Na co si dát pozor

Jak testovat

Testovací typy si napiš sám, zachytí většinu chyb:

Překládej s -fsanitize=address,undefined.

Kontrola před odevzdáním

Zdroje

  • NI-EPC, zadání Úloha 1
  • ni_epc_02: placement new a destrukce strany 24–48
  • ni_epc_03: paměťové algoritmy strany 3–17
  • ni_epc_04: std::vector strany 36–48
  • ni_epc_10: realokace vektoru a záruky strany 9–19
  • NI-EPC cvičení 3, úlohy 3 a 4