===== Úkol 4 ===== Ve 4. úkolu převedete strukturu list z [[courses:a7b36pjc:ukoly:ukol_3|minulého úkolu]] na plnohodný objekt s metodami a konstruktory. Zároveň listu přibyly čtyři nové metody, jmenovitě * ''list::merge'', která předpokládá, že jsou oba seznamy seřazené a sloučí je do levého (tak, aby výsledný seznam byl též seřazený) * ''list:remove'', která bere číslo a vymaže z listu všechny jeho výskyty * ''list::unique'', která z listu vymaže všechny sousedící duplikáty * ''list::reverse'', která otočí pořadí prvků v listu * konstruktor, který bere vektor a vytvoří seznam obsahující stejné prvky jako předaný vektor. Stáhněte si {{:courses:a7b36pjc:ukoly:small4.zip|potřebné hlavičkové soubory a testy}}. ==== Co odevzdat? ==== Jeden nebo více souborů ''.cpp'', které implementují funkce deklarované v souboru ''list.hpp'' tak, aby testy procházely a neztrácela se paměť. Při práci na úkolu soubor ''list.hpp'' neměňte; nemusíte ho ani odevzdávat. ===== Rady ===== Nezapomeňte, že při definování funkce, která je deklarována uvnitř třídy, k ní musíte referovat pomocí jména třídy. class foo { void say_hello(); }; void foo::say_hello() { std::cout << "hello\n"; } ==== Užitečné hlavičky ==== Pro tento úkol žádné hlavičky ze standardní knihovny nedoporučujeme. ==== Implementační rady ==== * Při operacích, které modifikují oba listy, silně doporučujeme pracovat přímo s uzly obou listů, ne pouze s prvky uloženými v nich. * Obvykle se očekává, že merge je [[https://cs.wikipedia.org/wiki/Stabiln%C3%AD_%C5%99azen%C3%AD|stabilní]], ale v tomto úkolu to není testováno. * V inicializačním seznamu lze zavolat jiný konstruktor třídy.