Računarski praktikum I - Vježbe 06 - Standard Template Library (2)

Слични документи
Računarski praktikum I - Vježbe 11 - Funktori

Računarski praktikum I - Vježbe 07 - Podstrukture, const, reference

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

Računarski praktikum I - Vježbe 09 - this, static

Računarski praktikum I - Vježbe 01 - Uvod

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

1. Vremensko ograničenje Memorijsko ograničenje ulaz izlaz 0,1 s 64 MB standardni ulaz standardni izlaz Banka želi da upozori kupce na sumnjive aktivn

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc

Programiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj

Државно такмичење године 5. и 6. разред 1. [pločice] Правоугаону терасу димензија d s центиметара квадратних треба поплочати коришћењем плочица

Microsoft PowerPoint - MR - Vjezbe - 03.ppt [Compatibility Mode]

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

Microsoft PowerPoint - 07-DinamickeStrukturePodataka

Uvod u računarstvo 2+2

Hash, topsort (stack, queue), deque, map Hash 1. За дати низ од n елемената, где је n паран број и n <= 10 6, испитати да ли он може бити подељен на n

Tutoring System for Distance Learning of Java Programming Language

PRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekste

Uvod u računarstvo 2+2

Programiranje 1 drugi kolokvij, 2. veljače Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje,

Uvod u računarstvo 2+2

PDO

Tutoring System for Distance Learning of Java Programming Language

1 jmbag ime i prezime Programiranje 2 prvi kolokvij, Rezultati i uvidi u kolokvije: Rezultati u petak, 3.5., navečer na webu, a uvidi u p

070-ALIP2-udzbenik.indb

Funkcije predavač: Nadežda Jakšić

Tutoring System for Distance Learning of Java Programming Language

1. OPĆE INFORMACIJE 1.1. Naziv kolegija Programiranje 1.6. Semestar Nositelj kolegija dr.sc. Bruno Trstenjak, v. pred Bodovna vrijednost

Uvod u takmičarsko programiranje

2015_k2_z12.dvi

Uvod u računarstvo 2+2

Slide 1

PROGRAMIRANJE Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Algoritam je postupak raščlanjivanja problema na jednostavnije

Sadržaj 1 Diskretan slučajan vektor Definicija slučajnog vektora Diskretan slučajan vektor

Sveučilište u Zagrebu PMF Matematički odsjek Mreže računala Vježbe 10 Zvonimir Bujanović Luka Grubišić Vinko Petričević

I колоквијум из Основа рачунарске технике I СИ- 2017/2018 ( ) Р е ш е њ е Задатак 1 Тачка А Потребно је прво пронаћи вредности функција f(x

Objektno orjentirano programiranje

PowerPoint Presentation

Funkcije predavač: Nadežda Jakšić

Uvod u PHP

Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br

Grananje u programu predavač: Nadežda Jakšić

Microsoft PowerPoint - 10-Jednodimenzionalni nizovi.ppt [Compatibility Mode]

PowerPoint Presentation

PHP kod

Microsoft Word - 15ms261

Microsoft Word - 11 Pokazivaci

I grupa 1. Napisati program koji izračunava i ispisuje zbir 4 najveća od pet brojeva unetih sa standardnog ulaza. ulaz izlaz Analiza: 1.

Osnove inženjerske informatike II. Uvod u programiranje Vaš prvi program K. F. & V. B.

Programiranje 1 5. predavanje dodatak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 5. predavanj

8 2 upiti_izvjesca.indd

1. Apsolutni pobednik na glasanju vreme memorija ulaz izlaz 0,1 s 64 Mb standardni ulaz standardni izla Apsolutni pobednik izbora je onaj ko osvoji ba

Microsoft PowerPoint - Datoteke [Compatibility Mode]

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

Slide 1

OOP1 - domaci 2 (2004/05)

Strukture predavač: Nadežda Jakšić

studirko.com predstavlja: Večernja škola C# za FPZ ( ) v 4.0 Za studirko.com napisao: Slaven Špigl

P11.3 Analiza zivotnog veka, Graf smetnji

Microsoft Word - AIDA2kolokvijumRsmerResenja.doc

The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature opti

Programiranje 2 7. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 7. predavanje p. 1/7

Konstrukcija i analiza algoritama vežbe 10 Nina Radojičić 15. decembar Algoritamske strategije - podeli pa vladaj (divide and conquer) Ova stra

PowerPoint Presentation

Microsoft Word - MySQL_3.doc

UNION Banka DD Sarajevo Tel.: Dubrovačka br Sarajevo, Bosna i Hercegovina Fax:

03 SUBP

Algoritmi SŠ P1

UAAG Osnovne algebarske strukture 5. Vektorski prostori Borka Jadrijević

Sveucilište u Zagrebu

УНИВЕРЗИТЕТ У НИШУ ПРИРОДНО-МАТЕМАТИЧКИ ФАКУЛТЕТ Департман за рачунарске науке Писмени део испита из предмета Увод у рачунарство 1. [7 пое

Programiranje 1

Model podataka

Sveučilište u Zagrebu Fakultet prometnih znanosti Zavod za inteligentne transportne sustave Katedra za primijenjeno računarstvo Vježba: #7 Kolegij: Ba

Programiranje II Beleške sa vežbi Smer Informatika Matematički fakultet, Beograd Sana Stojanović 1

VEŽBA 5: KLASE I OBJEKTI U C# Cilj ove vežbe je upoznavanje sa osnovama rada sa klasama i objektima u programskom jeziku C#. Pored toga, bide demonstr

Microsoft PowerPoint - 6. Query Builder.pptx

01 SUBP

Рачунарска интелигенција

Teorija skupova - blog.sake.ba

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]

Classroom Expectations

Matrice. Algebarske operacije s matricama. - Predavanje I

Fakultet tehničkih nauka, Novi Sad Predmet: ISIBP

Microsoft Word - SIORT1_2019_K1_resenje.docx

PowerPoint Presentation

Zadatak 011 Razmotrite sljedeći primjer. package hr.fer.oopj.primjeri.p011; public class Main { } public static void main(string[] args) { obrada(2.71

Slide 1

MEĐIMURSKO VELEUČILIŠTE ČAKOVEC RAČUNALSTVO PATRIK MIHOCI Izrada modela za objektno relacijsko povezivanje podataka u okviru aplikacije za opis predme

Programiranje predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2016, 10. predavanje p. 1

Microsoft Word - Java_introduction_NEW_SYLLABUS.doc

PowerPoint Presentation

СТЕПЕН појам и особине

PowerPointova prezentacija

PowerPoint Presentation

Programiranje 1 9. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 9. predavanje p. 1/6

Upitni jezik SQL

NIZOVI

Računarske mreže Čas 2 Ivana Tanasijević Matematički fakultet, Beograd 1

Microsoft PowerPoint - OOPpredavanja05 [Compatibility Mode]

Транскрипт:

Prirodoslovno-matematički fakultet Matematički odsjek Sveučilište u Zagrebu RAČUNARSKI PRAKTIKUM I Vježbe 06 - Standard Template Library (2) v2018/2019. Sastavio: Zvonimir Bujanović

pair pair je generička struktura koja predstavlja uređeni par. Gotovo je identična kao naša ranija implementacija strukture par. #include <utility> Konstruktori. pair<int, int> A; pair<int, string> B( 10, "rp1" ), C( 5, "x" ); Primjer korištenja. A = make_pair( 2, 3 ); B.first = 20; C.second = "vjezbe"; if( B == C ) {... } B = C; if( B < C ) {... } 2

tuple tuple je generička struktura u C++11 koja predstavlja uređenu n-torku. #include <tuple> Konstruktori. tuple<int, char, int> A; tuple<int, char, string> B( 10, 'b', "rp1" ), C( 5, 'c', "x" ); Primjer korištenja. A = make_tuple( 2, 'a', 3 ); get<0>( B ) = 20; get<2>( B ) = "blabla"; if( B == C ) {... } B = C; if( B < C ) {... } 3

set set<t> je generička struktura koja predstavlja skup elemenata tipa T. Na tipu T mora biti definiran operator <. #include <set> Usporedi s ATP Set iz Struktura podataka i algoritama. Implementacija u STL-u je efikasnija od onih napravljenih na SPA. set je obično implementiran u STL-u pomoću tzv. red-black stabala. 4

set Konstruktori. Prazan skup. set<int> A; Skup koji sadrži sve elemente nekog polja, vectora, liste (Ovakav konstruktor postoji i za vector i list.) vector<string> A; // napunimo nekako vektor set<string> S1( A.begin(), A.end() ); int B[5] = { 5, 10, 15, 20, 25 }; set<int> S2( B, B+5 ); 5

set Ubacivanje elemenata. set<int> A; A.insert( 5 ); // A = {5} A.insert( 10 ); // A = {5, 10} A.insert( 15 ); // A = {5, 10, 15} A.insert( 10 ); // A = {5, 10, 15} Funkcija insert vraća pair. Prvi element para je iterator na ubačeni element. Drugi element para je tipa bool. Vrijednost mu je false ako je element koji ubacujemo već bio element skupa, a true inače. Možemo odjednom ubaciti i sve elemente nekog drugog kontejnera. vector<int> v; A.insert( v.begin(), v.end() ); set<int> B; A.insert( B.begin(), B.end() ); 6

set Skup možemo zamišljati kao sortiranu listu po kojoj se krećemo iteratorima. // ispis elemenata skupa (od manjeg prema većem): set<int>::iterator si; for( si = A.begin(); si!= A.end(); ++si ) cout << *si << " "; Sličnost s iteratorima kod liste: U A.begin() postoji element skupa, u A.end() ne postoji. Iteratori su dvosmjerni, tj. smijemo raditi i --si. // ispis elemenata skupa (od većeg prema manjem): set<int>::iterator si = A.end(); do { --si; cout << *si << " "; } while( si!= A.begin() ); 7

set Za razliku od liste, ne možemo mijenjati vrijednost elementa pomoću iteratora! (To bi moglo narušiti sortiranost skupa.) set<int> S; S.insert( 5 ); set<int>::iterator si = A.begin(); cout << *si; // OK: ispise "5". *si = 3; // NIJE OK:!!! compile error!!! Dakle, iteratori u skupu su read-only. 8

set Broj pojavljivanja elementa: count. // A.count(x) vraca broj pojavljivanja elementa x u skupu A. // (dakle, vraca 0 ili 1) if( A.count( 5 ) ) cout << "Skup A sadrzi element 5"; Iterator na traženi element: find. // A.find(x) vraca iterator elementa x u skupu A. // Ako x nije element skupa, vraca A.end() if( A.find( 1 ) == A.end() ) cout << "1 nije element skupa A"; 9

set Broj elemenata skupa: size. set<int> A; A.insert( 5 ); A.insert( 10 ); A.insert(5); // A = {5, 10} cout << A.size(); // ispise: "2" Provjera je li skup prazan: empty. // A.empty() vraca true ako je A prazan, a false inace. if( A.empty() ) {... } Brisanje svih elemenata skupa: clear. A.clear(); if( A.empty() ) {... } // sada je prazan Sve ove funkcije postoje i u vector i u list. 10

Zadatak 1 Napišite program koji: 1 Učitava stringove sve dok ne unesemo string koji je već ranije bio unešen. 2 Ispisuje koliko je različitih stringova bilo unešeno, te sve te stringove. 11

set Izbacivanje elemenata: erase. set<int> A;... // napravimo npr. A = {5, 15, 20} A.erase( 15 ); // A = {5, 20} A.erase( 10 ); // A = {5, 20} Izbacivati možemo i pomoću iteratora na element. // Izbacujemo najmanji element. A.erase( A.begin() ); // Izbacujemo sve elemente (krace je pomocu A.clear()). set<int>::iterator si; for( si = A.begin(); si!= A.end(); ) A.erase( si++ ); Kao i kod liste, brisanje uništi iterator. 12

Zadatak 2 Napišite program koji: 1 Učitava stringove sve dok ne unesemo string "kraj". 2 Ispisuje koliko je različitih stringova uneseno (zajedno s "kraj"), te ih sve ispisuje. 3 Nakon toga izbacuje sve stringove parne duljine, ispisuje koliko je stringova ostalo u skupu, te ih sve ispisuje. 13

multiset multiset je generička struktura koja predstavlja multiskup. U multiskupu možemo imati više istih elemenata. #include <set> Operacije su analogne onima iz set-a. multiset<int> A; A.insert( 7 ); A.insert( 5 ); A.insert(5); // A = {5, 5, 7} cout << A.size(); // 3 cout << A.count( 5 ); // 2 14

multiset Svaka kopija pojedinog elementa ima svoj iterator. find(x) vraća iterator na neki element koji je = x. lower_bound(x) vraća iterator na prvi element koji je x. upper_bound(x) vraća iterator na prvi element koji je > x. multiset<int> A;... // napunimo do A = {5, 10, 10, 15, 20} multiset<int>::iterator si1, si2, si3; si1 = A.find(10); // iterator na prvi ili drugi element 10 si2 = A.lower_bound(10); // iterator na prvi element 10 ++si2; // iterator na drugi element 10 si3 = A.upper_bound(10); // iterator na element 15 Brisanje elemenata. erase(x) briše sve kopije elementa x. erase(si) briše samo onu kopiju na koju pokazuje iterator si. 15

map map<d, K> je generička struktura koja predstavlja preslikavanje elemenata domene D u kodomenu K. Na elementima domene mora biti definiran operator <. Kodomena može biti proizvoljna. Elementi domene = ključevi, elementi kodomene = vrijednosti. #include <map> Usporedi s ATP Mapping iz Struktura podataka i algoritama. Implementacija u STL-u je efikasnija od onih napravljenih na SPA. map je obično implementiran u STL-u pomoću tzv. red-black stabala. 16

map map je primjer asocijativnog polja. Indexi u polju su elementi domene. map<string, int> ocjena; ocjena[ "Mirko" ] = 3; ocjena[ "Maja" ] = 5; cout << ocjena[ "Mirko" ]; // ispise "3" //!!! oprez kod citanja nepridruzenih elemenata!!! // ispise "0" i doda ocjena[ "Pero" ] = 0 u mapu. // (opcenito, poziva se defaultni konstruktor za kodomenu) cout << ocjena[ "Pero" ]; map<int, int> polje; polje[ 1 ] = 123; polje[ 10000000 ] = 456; polje[ -1000000 ] = 789; 17

map map također možemo zamišljati kao sortiranu listu. U svakom čvoru nalazi se uređeni par (d, k), gdje je d element domene, a k njemu pridružen element kodomene. Lista je uzlazno sortirana po elementima domene. Dakle, iteratori u mapi su pokazivači na pair. map<string, int> ocjena; ocjena[ "Mirko" ] = 3; ocjena[ "Maja" ] = 5; map<string, int>::iterator mi; for( mi = ocjena.begin(); mi!= ocjena.end(); ++mi ) cout << mi->first << " ima ocjenu " << mi->second << endl; // ispis je sortiran po elementima domene: // Maja ima ocjenu 5 // Mirko ima ocjenu 3 18

map Traženje ključa u mapi: find. map<string,int>::iterator it = ocjena.find( "Pero" ); if( it!= ocjena.end() ) // ima li Pero ocjenu? cout << "Pero ima ocjenu " << it->second; else cout << "Pero nema ocjenu"; Smijemo promijeniti vrijednost pridruženu nekom ključu, ali ne i sam ključ jer to može narušiti sortiranost mape. map<string,int>::iterator it = ocjena.find( "Pero" ); if( it!= ocjena.end() ) // ima li Pero ocjenu? { it->second = 5; // OK, Perina ocjena je sada 5. it->first = "Slavko"; // NIJE OK,!!! compile error!!! } 19

map Brisanje elemenata u mapi: erase. // erase(x) brise element s kljucem x ocjena.erase( "Marija" ); // erase(mi) brise element na koji pokazuje iterator mi ocjena.erase( ocjena.begin() ); Funkcije clear, empty, size, =, == rade kao i s ostalim kontejnerima. 20

Zadatak 3 Napišite program koji: 1 Učitava imena i ocjene sve dok ne učitamo string "kraj" za ime. 2 Izbacuje sve osobe s ocjenom 1. 3 Ispisuje sva imena i ocjene preostalih osoba. 21

multimap multimap<d, K> je preslikavanje koje jednom elementu domene D pridružuje više elemenata kodomene K. #include <map> Operacije su kombinacija onih iz map i multiset. Umjesto [] koristimo insert. Iterator pokazuje na uređeni par (d, k). multimap<string, int> ocjene; ocjene.insert( make_pair( "Ana", 3 ) ); ocjene.insert( make_pair( "Pero", 4 ) ); ocjene.insert( make_pair( "Ana", 5 ) ); multimap<string, int>::iterator it; it = ocjene.find( "Ana" ); // jedna od Aninih ocjena it = ocjene.lower_bound( "Ana" ); // prva Anina ocjena it = ocjene.upper_bound( "Ana" ); // prva iza Aninih ocjena 22

Preostali kontejneri U STL-u postoji još kontejnera koje nećemo detaljnije obraditi: deque - lista s efikasnim operacijama dodavanja i brisanja elemenata s oba kraja (kao stack i queue istovremeno). C++11 uvodi još neke kontejnere: array - efikasna implementacija polja fiksne veličine. forward_list - jednostruko povezana lista. unordered_set, unordered_multiset - (multi)skup u kojem elementi nisu nužno sortirani, već je pristup do njih implementiran pomoću hash funkcije. unordered_map, unordered_multimap - preslikavanje elemenata domene na kodomenu, ne nužno sortirano po elementima domene; pristup pomoću hash funkcije. 23

Složeni predlošci Parametar u predlošku može i sam biti složeni tip. Prilikom korištenja samo treba voditi računa o tipovima podataka. map<pair<int, int>, stack<string>> M; pair<int, int> p( 3, 7 ); stack<string> S; S.push( "RP1" ); M[p] = S; map<pair<int, int>, stack<string>>::iterator mi; for( mi = M.begin(); mi!= M.end(); ++mi ) { // tip od mi->first je pair<int, int> pair<int, int> pp = mi->first; } // tip od mi->second je stack<string> mi->second.push( "Jupi!" ); 24

Ključna riječ auto C++11 uvodi ključnu riječ auto. U donjoj deklaraciji, kompajler odredi tip od izraza nesto, te automatski pridruži taj tip varijabli var. auto var = nesto; Ovo može jako skratiti neke deklaracije. auto i = 5; // isto kao: int i = 5; auto d = 3.14; // isto kao: double d = 3.14; map<int, string> M; // isto kao: map<int, string>::iterator mi = M.begin(); auto mi = M.begin(); Iz edukativnih razloga, korištenje auto nije dozvoljeno na kolokvijima! 25