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

Podobné dokumenty
Šablony, kontejnery a iterátory

Šablony, kontejnery a iterátory

Funkční objekty v C++.

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

Vector datový kontejner v C++.

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

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

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

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

Vstupní a vstupní proudy v C++

Standardní algoritmy vyhledávací.

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

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

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

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

Ukazatele, dynamická alokace

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

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

Operační systémy. Cvičení 4: Programování v C pod Unixem

Algoritmizace a programování

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

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

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

Připravil: David Procházka. Programovací jazyk C++

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

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

Paralelní architektury se sdílenou pamětí typu NUMA. NUMA architektury

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

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

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

Zpracoval:

Standardní algoritmy v C++.

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

Př. další použití pointerů

Jazyk C++, některá rozšíření oproti C

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

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

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

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

Úvod do programování. Lekce 1

Základy C++ I. Jan Hnilica Počítačové modelování 18

Základy programování (IZP)

Jazyk C++ II. Výjimky

Prostory jmen. při vkládání několika hlavičkových souborů může vzniknout kolize. logika.h const int x=5; typedef struct {...

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

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

Abstraktní třídy, polymorfní struktury

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

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

2 Datové typy v jazyce C

Struktury, funkce, reference

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

Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,Benešovo náměstí 1, příspěvková organizace

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

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

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

Práce s knihovnami. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

Základy programování (IZP)

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

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

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

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

18. února 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

Syntaxe vyjímek. #include <iostream> #include <string> using namespace std; // Trida vyjimek class Vyjimka { private:

Zpracoval:

8. Načítání a zápis PDB souboru

Objektově orientované programování

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

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

Šablony funkcí a tříd (Templates) Genericita

Ukazatele a pole. Chceme-li vyplnit celé pole nulami, použijeme prázdný inicializátor: 207 Čárka na konci seznamu inicializátorů

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

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

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

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

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.

Hornerovo schéma. je algoritmus výpočtu hodnoty polynomu P(x) v bodě x 0. eliminuje výpočet i-té mocniny převodem na postupné násobení.

Více o konstruktorech a destruktorech

Zápis programu v jazyce C#

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

Digitální učební materiál

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

Odvozené a strukturované typy dat

Datové typy pro reálná čísla

Digitální učební materiál

Výrazy, operace, příkazy

Stručný obsah První týden Druhý týden 211 Třetí týden 451 Rejstřík 787

IUJCE 07/08 Přednáška č. 1

Digitální učební materiál

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

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

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

Operační systémy. Cvičení 3: Programování v C pod Unixem

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

Transkript:

Řetězce, pole a STL V C++ je výhodné pro práci s řetězci použít třídu string, funkce C jsou stále k dispozici cstring, ukazatele a pole lze stále používat stejně, jako v C, použití iterátorů a dalších konstrukcí STL v příkladech

Množina Typ prvku určuje šablona insert() vloží prvek, find() vrátí iterátor odkazující na prvek, nebo end() což je iterátor dosažení konce množiny (prvek nenalezen).

Množina čísel int stl-set-int.cpp #include <set> #include <iostream> using namespace std; int main() { set<int> mnozina; set<int>::iterator iter; mnozina.insert(2); mnozina.insert(5); mnozina.insert(7); for (int i = 0; i < 10; i++) { iter = mnozina.find(i); if (iter!= mnozina.end()) cout << i << " je prvek mnoziny" << endl; } // for()

Množina znaků stl-set-chr.cpp Cílem je vyloučit samohlásky z řetězce #include <set> #include <string> #include <iostream> int main() { set<char> samohlasky; set<char>::iterator iter; samohlasky.insert('a'); samohlasky.insert(' '); string text = "Dnes je sobota.";

Množina znaků pokr. 2 for (int i = 0; i < text.size(); i++) { iter = samohlasky.find(text.at(i)); if (iter == samohlasky.end()) cout << text.at(i); } // for() Dnes je sobota. Dnsjsbt.

Ukazatele v C++ Převzato z C, velmi efektivní práce v paměti, odpovídá von Neumanově architektuře počítače, v STL nahrazeno iterátory. typ *uk; uk ukazatel, *uk dereference ukazatele.

int x, y, *px, *p2x; px = &x; /* px nyní ukazuje na x */ *px = 5; /* totéž co x = 5; */ y = *px + 1; /* y = x + 1; */ *px += 1; /* x += 1; */ (*px)++; /* x++; závorky jsou nutné*/ p2x=px; /*p2x ukazuje na totéž co px, tj. na x*/ *p2x = *p2x + y; /* x = x + y; */

Pole metodami jádra C++ typ jméno[rozsah]; je jednorozměrné, kolekce pevně určeného počtu proměnných stejného typu, přístup: identifikátor pole a index, obsazuje spojitou oblast operační paměti, identifikátor pole je konstantní ukazatel na první prvek pole.

Příklad práce s polem arry-demo.cpp 1 const int N = 5; double p[n] = {1.2, 3.4, -1.2, 123.45e67, -4.e-5}; //p[0] p[1] p[2] p[3] p[4] cout << "index\thodnota" << endl; for (int index = 0; index < N; index++) { cout << index << '\t' << p[index] << endl; }

arry-demo.cpp 2 konformní pole (neurčený počet prvků): int c[] = {3, 4, 5}; int pocet = sizeof(c)/sizeof(int); cout << "pocet prvku pole c je:" << pocet << endl;

Aritmetika ukazatelů ukazatel je adresa v paměti, aritmetika probíhá s ohledem na datový typ, s nímž je ukazatel spojen, odečtění dvou ukazatelů je počet prvků pole meni nimi, operátor ++ a -- je lépe číst jako následující a předcházející prvek.

arry-demo.cpp 3 int *uk_int = (c + pocet) - 1; // začíná se od 0 do { cout << *uk_int << '\t'; } while (uk_int--!= c); cout << endl << "A ted bude zmena!" << endl; uk_int = c; // teď by stačilo jen uk_int++; *(uk_int + 1) = -4321; for(; uk_int < c+pocet; uk_int++) { cout << *uk_int << '\t'; }

výstup: index hodnota 0 1.2 1 3.4 2-1.2 3 1.2345e+069 4-4e-005 pocet prvku pole c je:3 5 4 3 A ted bude zmena! 3-4321 5 konec

Pole a vector bezpečnost pole je tradiční přístup jádra C/C++ nekontroluje meze, přístup přes [] vector je součástí STL schopen vyvolat vyjímku (out_of_range ze stdexcept), přístup at() ale i []

stl-vec-sec.cpp 1/2 #include <vector> #include <iostream> #include <exception> #include <stdexcept> using namespace std; int main() { const int N = 5; vector<int> v(n); int klas[n]; int i; for (i = 0; i < N; i++) { v.at(i) = 2 * i; klas[i] = 2 * i; } // for()

stl-vec-sec.cpp 2/2 cout << "vector bezpecne pres.at()" << endl; try { for (i = 0; i < 2 * N; i++) //chyba v mezi cout << v.at(i) << ' '; } catch (out_of_range e) { cout << "Zachycena vyjimka!" << endl; cout << "Jeji popis je: " << e.what() << endl; } cout << endl << "pole klasicky pomoci []" << endl; for (i = 0; i < 2 * N; i++) cout << klas[i] << ' ';

stl-vec-sec.cpp výstup vector bezpecne pres.at() 0 2 4 6 8 Zachycena vyjimka! Jeji popis je: vector [] access out of range pole klasicky pomoci [] 0 2 4 6 8 2293528 8 2293728 4012536 4012556

Vícerozměrná pole typ jmeno[dim1][dim2] pole je v C++ jednorozměrné, řešení -> prvkem pole je pole, přístup přes indexy, řádek, sloupec

Ukazatele, konstanty a pole Klasický C přístup pracuje s poli jako s ukazateli (jen ID pole je konstantní uk.). Pozor! Konstantní je ukazatel nebo to, na co ukazuje: const int ci = 7; const int *pci; // neinic. const int * const cpc = &ci;

Kopírování pole zdroj, cíl, počet prvků, buď přes jméno pole a [], nebo pomocí ukazatelů na bázový typ, př. soubor arry-cpy.cpp: void copy_array2(const int *a, int *b, int n) { //a-vstupni pole, b-vystupni pole, n-pocet prvku while (n-- > 0) *b++ = *a++; } // void copy_array2()

Řetězec v C pojetí pole znaků ukončené znakem s kódem 0 zarážka, příklad kopírování str-cpy.cpp, rodina funkcí str... z hlavičky cstring, pozor, řetězec je chápán jako ukazatel ne jako celý text pro komfort je lepší C++ třída string.

Argumenty příkazového řádku int main(int argc, char *argv[]); argc je počet argumentů, argv jsou hodnoty (C-řetězce). Příklad cmd-ln.cpp.