PROGRAMOVÁNÍ V C++ CVIČENÍ. Michal Brabec



Podobné dokumenty
Jazyk C++ II. STL knihovna kontejnery část 1

PB161 Programování v jazyce C++ Přednáška 3

Šablony, kontejnery a iterátory

Šablony, kontejnery a iterátory

PB161 Programování v jazyce C++ Přednáška 3

Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0;

PB přednáška (26. října 2015)

Množina v C++ (set, multiset).

PB161 Programování v jazyce C++ Přednáška 6

Ukazatele, dynamická alokace

Programování v jazyce C a C++

Vector datový kontejner v C++.

Cvičení z programování v C++ ZS 2016/2017 Přemysl Čech

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016

Virtuální metody - polymorfizmus

Programování v C++, 2. cvičení

Množina čísel int stl-set-int.cpp

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů Standardně zavedené proudy

Základní datové struktury

Jazyk C++ II. STL knihovna kontejnery část 2

Kolekce, cyklus foreach

PB161 Programování v jazyce C++ Přednáška 10

Spojová implementace lineárních datových struktur

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Lineární spojový seznam (úvod do dynamických datových struktur)

PROGRAMOVÁNÍ V C++ CVIČENÍ

map, multimap - Asociativní pole v C++.

Základy programování (IZP)

Základy programování (IZP)

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Pointery II. Jan Hnilica Počítačové modelování 17

PB161 Programování v jazyce C++ Přednáška 9

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

PB161 Programování v jazyce C++ Přednáška 4

PB161 Programování v jazyce C++ Přednáška 10

Programování v C++ 3, 3. cvičení

Základy programování (IZP)

Úvod do programování - Java. Cvičení č.4

Standardní algoritmy v C++.

Základy programování (IZP)

Programování v jazyce C a C++

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

Více o konstruktorech a destruktorech

Mělká a hluboká kopie

Programování v C++ 2, 4. cvičení

PB161 Programování v jazyce C++ Přednáška 11

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Objektově orientované programování

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

Pole a kolekce. v C#, Javě a C++

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

přetížení operátorů (o)

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Programování v C++ 1, 16. cvičení

PŘETĚŽOVÁNÍ OPERÁTORŮ

Programování v C++ 1, 1. cvičení

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

přetížení operátorů (o)

Lineární datové struktury

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) 28. prosince Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Programování v C++ 2, 7. cvičení

Standardní algoritmy vyhledávací.

Dynamické datové typy a struktury

Řetězce. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10

PB161 Programování v jazyce C++ Přednáška 11

8 Třídy, objekty, metody, předávání argumentů metod

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

STL: standardní knihovna šablon

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Programování v C++ 2, 8. cvičení

Domácí úkoly 2013/14

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Algoritmizace a programování

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Struktura programu v době běhu

PB161 Programování v jazyce C++ Přednáška 5

Digitální učební materiál

RadioBase 3 Databázový subsystém pro správu dat vysílačů plošného pokrytí

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

Další příklady. Katedra softwarového inženýrství. Katedra teoretické informatiky, Fakulta informačních technologii, ČVUT v Praze. Karel Müller, 2011

Správa zařízení Scan Station Pro 550 a Servisní nástroje zařízení Scan Station

Jazyk C++ I. Šablony

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

TECHNICKÁ DOKUMENTACE SOCIÁLNÍ SÍŤ MRSHARE. David Malát, Adam Novák, David Vurbs, Dominik Walta. SPŠ Na Proseku 2012/13. Pod velením Davida Vurbse

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Maturitní otázky z předmětu PROGRAMOVÁNÍ

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Jazyk C++ II. Výjimky

Transkript:

PROGRAMOVÁNÍ V C++ CVIČENÍ Michal Brabec

ARCHITECTURE Input 2 / 15

TASK Vytvořte základní data pro filesystem (zatím v main) Jednu autorizační autoritu Jeden registr souborů Cyklus který zpracovává vstup Vytvořte třídu pro práci se soubory (search engine) Engine musí mít přístup k registru souborů a autorizační autoritě Engine slouží jako rozhraní systému Vstup překládá textové příkazy na metody enginu Přidejte engine k ostatním objektům a připojte ho na input 3 / 15

ITERÁTORY Koncept standardní knihovny Nástroj pro práci s obsahem kontejneru Jednotný přístup pro všechny kontejnery Iterátory se mírně liší Podle toho k čemu je možné je použít Podle způsobu průchodu kontejnerem Podle rozsahu platnosti Iterátory obsahují odkaz na prvky kontejneru Chytrý ukazate na prvky kontejneru 4 / 15

VSTUPNÍ A VÝSTUPNÍ ITERÁTORY Vstupní iterátory je možné pouze číst Výstupní je možné upravovat Přiřazení int x = y; -> l-value = r-value Iterátor je v podstatě ukazatel do kontejneru a omezení se vztahují na práci s prvky kontejneru V praxi to vede k rozlišení konstantních a normálních iterátorů Konstantní iterátory poskytují const value& operator*() Normální iterátory poskytují value& operator*() 5 / 15

FORWARD ITERÁTORY Základní verze podporovaná všemi kontejnery Umožňují jednosměrný průchod kontejnerem Podporované operace operator* - dereference na l-value operator* - dereference na r-value operator++ - posun na dalsi prvek operator== - porovnání na rovnost operator!= - nerovnost Kontejnery - forward_list, unordered_map 6 / 15

BIDIRECTIONAL ITERÁTORY Obousměrný iterátor Podporovaný většinou běžných kontejnerů Podporované operace (navíc) operator-- - posun na předchozí prvek Kontejnery map, list, set 7 / 15

RANDOM ACCESS ITERÁTORY Nejsilnější verze iterátoru Podporuje skoro stejné operace jako pointer Podporované operace (navíc) operator+ - posunutí o n prvků dopředu jednou operací operator- - posunutí o n prvků zpět operator<,<=,>=,> - porovnání Kontejnery vector, array 8 / 15

DEFINICE Typy iterátorů jsou definovány v rámci třídy kontejneru Jednoduché třídy definované v rámci kontejneru Typy iterátorů vector<>::iterator - výstupní iterátor vector<>::const_iterator - vstupní iterátor vector<>::reverse_iterator - iterátor pro reverzní průchod vector<>::const_reverse_iterator - vstupní reverzní iterátor Další důležité definice vector<>::value_type vector<>::reference vector<>::const_reference reference - typ prvků v kontejneru - reference na prvky - konstantní 9 / 15

POUŽITÍ Cyklus, průchod kontejneru od začátku do konce begin() iterátor ukazující na první prvek end() iterátor ukazující za poslední prvek Cyklus, průchod kontejneru od konce rbegin() iterátor ukazující na poslední prvek rend() iterátor ukazující před první prvek 10 / 15

CYKLUS for (std::vector<file>::iterator i = Files_.begin(); i!= Files_.end(); ++i) {... } 11 / 15

POUŽITÍ Použití std::vector<int> arr(10, 0); std::vector<int>::iterator iter = arr.begin(); Vektor je vhodné přejmenovat typedef std::vector<int> IntVector; IntVector arr(10, 0); IntVector::iterator iter = arr.begin(); Přejmenování známého typu typedef typedef known_type_name new_type_name; 12 / 15

TASK Přejmenujte vektor souborů v registru pomocí typedef konstrukce, aby se s ním snáze pracovalo Přidejte registru metodu, která umožní bezpečný přístup k vektoru souborů (nejlépe bez kopírování) 13 / 15

TASK Vytvořte metodu login v search engine, která přihlásí uživatele Engine zavolá příslušnou metodu na autrizační autoritě Vytvořte metodu list v search engine, která vypíše seznam souborů, které patří současnému uživateli K získání souborů a uživatele použijte příslušné objekty Vektor procházejte pomocí iterátorů 14 / 15

PROBLÉMY Iterátory nejsou absolutně bezpečné Dva hlavní problémy Iterátory dvou různých kontejnerů téhož typu Je možné normálně porovnávat Je možné předávat jako rozsah funkcím a cyklům Vede ke kritickým chybám (práce s cizí pamětí, mezi kontejnery) Iterátory kontejnerů u kterých dochází k realokaci Vzniká v důsledku změn v kontejneru (alokace většího prostoru) Iterátory získané před realokací jsou nepoužitelné Vede ke kritickým chybám (práce s cizí pamětí, dříve kontejner) 15 / 15

DALŠÍ POUŽITÍ Iterátory používají mnohé metody tříd ve standardní knihovně Konstruktor vectoru umožňuje naplnit nový vektor daty z jiného kontejneru Funkce erase maže vybraný prvek ve vektoru (posun dat) Iterátory je možné ukládat a předávat jako ukazatele (pozor na realokaci!) Pole/vector iterátorů index pro optimalizovaný přístup Dvojice iterátorů rozsah zpracovávaných dat (kontejner není potřeba) Algoritmy (později) 16 / 15

TASK Vytvořte konzolové příkazy (rozpoznávejte) login USERNAME - přihlášení uživatele do autorizační autority ls - výpis seznamu souborů, které patří aktuálnímu uživateli logout odhlášení uživatele exit ukončení systému Napojte příkaz ls na metodu list Napojte příkaz login/logout na metodu login/logout enginu Přidejte nástroje pro přidávání a mazání souborů Metody se přidají do engine a budou volat metody registeru Přidejte příkazy, které dané metody vyvolávají 17 / 15