STL:n uudistukset. Seppo Koivisto TTY Ohjelmistotekniikka

Samankaltaiset tiedostot
Demo 6 vastauksia. 1. tehtävä. #ifndef #define D6T1 H D6T1 H. #include <iostream> using std::ostream; using std::cout; using std::endl;

1 C++:n standardikirjasto

Olio-ohjelmointi Syntaksikokoelma

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. V Geneerisyys

1. C++:n STL-kirjasto

C++11 lambdat: [](){} Matti Rintala

Tietorakenteet ja algoritmit

Algoritmit 1. Luento 4 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Standardi mallikirjasto

Tieto- ja tallennusrakenteet

OHJ-1150 Ohjelmointi II

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Olio-ohjelmointi Geneerisyys. 1. Johdanto

Lyhyt kertaus osoittimista

Algoritmit 2. Luento 2 Ke Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Rakenteiset tietotyypit Moniulotteiset taulukot

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

Algoritmit 2. Luento 3 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Algoritmit 1. Luento 5 Ti Timo Männikkö

Ohjelmoinnin peruskurssien laaja oppimäärä

Tiraka, yhteenveto tenttiinlukua varten

Ohjelmoinnin peruskurssien laaja oppimäärä

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit - syksy

Algoritmit 2. Luento 4 To Timo Männikkö

C sekalaista. Roope Hakulinen

Tietorakenteet ja algoritmit

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

Sisältö. 2. Taulukot. Yleistä. Yleistä

Tietorakenteet ja algoritmit

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Sisältö. 22. Taulukot. Yleistä. Yleistä

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

int puts(char *buff) Kirjoittaa puskurissa buff \0 :lla päätetyn merkkijonon standarditulostukseen. Formatoitu konsoli-i/o Tiedostot

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

A TIETORAKENTEET JA ALGORITMIT

Scheme-kesäkurssi luento 5

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

18. Abstraktit tietotyypit 18.1

Osoitin ja viittaus C++:ssa

Ohjelmoinnin perusteet Y Python

Tietorakenteet ja algoritmit

C++-tyyliopas Tampereen teknillinen yliopisto, Ohjelmistotekniikka, 2005

Algoritmit 2. Demot Timo Männikkö

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

A TIETORAKENTEET JA ALGORITMIT KORVAAVAT HARJOITUSTEHTÄVÄT 3, DEADLINE KLO 12:00

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Listarakenne (ArrayList-luokka)

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit V Hash-taulukot ja binääriset etsintäpuut

Algoritmit 1. Luento 10 Ke Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

TIEA341 Funktio-ohjelmointi 1, kevät 2008

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

Ohjelmoinnin peruskurssien laaja oppimäärä

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Algoritmit 1. Demot Timo Männikkö

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

C++ Vol 1. Stanley B. Lippman Josée Lajoie. Copyright IT Press Tämän e-kirjan kopiointi, tulostaminen ja jakeleminen eteenpäin luvatta on kielletty.

Algoritmit 1. Luento 6 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

TIETORAKENTEET JA ALGORITMIT

ITKP102 Ohjelmointi 1 (6 op)

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

815338A Ohjelmointikielten periaatteet

Luku 3. Listankäsittelyä. 3.1 Listat

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

4. Sekvenssit Astetta soveltavat sekvenssit

Osoittimet ja taulukot

TAMPEREEN TEKNILLINEN YLIOPISTO

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Rinnakkaistietokoneet luento S

9 Erilaisia tapoja järjestää

Tarkennamme geneeristä painamiskorotusalgoritmia

Tietorakenteet ja algoritmit

TIE Tietorakenteet ja algoritmit 25

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

Harjoitustyö: virtuaalikone

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

Transkriptio:

STL:n uudistukset Seppo Koivisto TTY Ohjelmistotekniikka 2012-05-04

Sisältö 1 Muutokset säiliöihin ja uudet säiliötyypit 2 3 4 5

STL:n säiliöt Viitteet ja osoittimet ovat muuttuneet: Allocator::reference value_type& T* std::allocator_traits <Allocator>::pointer Vastaavasti myös vakioviitteet ja vakio-osoittimet avainsanalla const Vakioiteraattorit, pl. stack, queue ja priority_queue

Uudet rajapintafunktiot Säiliö Vector Deque List shrink_to_fit X X emplace X X X emplace_back X X X emplace_front X X Taulukko 1: Sarjasäiliöiden uudet rajapintafunktiot Säiliöillä stack, queue ja priority_queue on em. funktioista vain emplace.

Uudet rajapintafunktiot Kaikille vanhoille assosiatiivisäiliöille on lisätty rajapintafunktiot emplace ja emplace_hint. Rajapintafunktio emplace rakentaa lisättävän elementin paikallaan, eli sitä ei kopioida, eikä siirretä. Sarjasäiliöiden emplace_back ja emplace_front laittavat alkion säiliön loppuun tai alkuun (vrt. push_back ja push_front) Assosiatiivisäiliöiden emplace_hint ottaa parametrikseen vielä lisäksi iteraattorin, joka vihjaa mihin alkio tulisi laittaa.

Uudet säiliötyypit Uusina säiliöinä STL:ään on toteutettu array forward_list unordered_set ja unordered_multiset unordered_map ja unordered_multimap Lisäksi on vielä tuple (utilities kirjastosta), mutta siitä ei sen enempää tässä.

array Array on käytännössä C-taulukon päälle luotu kuori. Jäsenfunktiot ovat vakioaikaisia, paitsi fill ja swap, jotka ovat lineaarisia. template < c l a s s T, // Tyyppi s i z e _ t N // Koko > s t r u c t a r r a y ;

array Indeksointi jäsenfunktiolla at() tai []-operaatiolla Funktioilla front ja back voidaan käsitellä ensimmäistä ja viimeistä alkiota Funktion data() avulla päästään suoraan käsiksi sisällä olevaan taulukkoon. Tarjoaa iteraattorit, myös käänteis- Kapasiteettiin liittyviä operaatioita ovat empty(), size() ja max_size()

forward_list Säiliöön lisääminen ja poistaminen on nopeaa mihin tahansa kohtaan On toteutettu yhteen suuntaan linkitettynä listana template < c l a s s T, c l a s s A l l o c a t o r = s t d : : a l l o c a t o r <T> > c l a s s f o r w a r d _ l i s t ;

unordered_set ja unordered_multiset Assosiatiivinen säiliö, joka sisältää joukon uniikkeja Key-tyyppisiä olioita. Multiset voi sisältää samojakin olioita. Haku, lisäys ja poisto ovat keskimäärin vakioaikaisia operaatioita. Vrt. set ja multiset logaritmisia. Eroavat set ja multiset säiliöistä siten, että alkiot eivät ole järjestyksessä. Esimerkki

unordered_map ja unordered_multimap Assosiatiivinen säiliö, joka sisältää joukon avain-arvo -pareja, joilla avain on uniikki. Multimap voi sisältää samojakin olioita. Haku, lisäys ja poisto ovat keskimäärin vakioaikaisia operaatioita. Vrt. map ja multimap logaritmisia. Eroavat map ja multimap säiliöistä siten, että alkiot eivät ole järjestyksessä.

Algoritmit Algoritmit on jaoteltu 10 luokkaan: Non-modifying sequence operations Modifying sequence operations Partitioning operations Sorting operations (on sorted ranges) Binary search operations (on sorted ranges) (ei muutoksia) Set operations (on sorted ranges) (ei muutoksia) Heap operations Minimum/maximum operations Numeric operations ja C library (ei muutoksia)

Ei-muokkaavat sarjaoperaatiot all_of, any_of, none_of, find_if_not Esimerkkinä all_of, loput suunilleen samannäköisiä template < c l a s s I n p u t I t e r a t o r, c l a s s U n a r y P r e d i c a t e > b o o l a l l _ o f ( I n p u t I t e r a t o r f i r s t, I n p u t I t e r a t o r l a s t, U n a r y P r e d i c a t e p ) { f o r ( ; f i r s t!= l a s t ; ++f i r s t ) { i f (! p ( f i r s t ) ) r e t u r n f a l s e ; } r e t u r n t r u e ; }

Muokkaavat sarjaoperaatiot copy_if, copy_n, move, move_backward, random_shuffle, shuffle random_shuffle oli ennenkin, mutta nyt on muutettu yhtä parametria: RandomNumberGenerator& r RandomNumberGenerator&& r

Partitiointioperaatiot is_partitioned ja partition_point Ensimmäinen tarkistaa onko annettu väli partitoitu ja toinen selvittää partitiointikohdan ja palauttaa iteraattorin template < c l a s s I n p u t I t e r a t o r, c l a s s U n a r y P r e d i c a t e > b o o l i s _ p a r t i t i o n e d ( I n p u t I t e r a t o r f i r s t, I n p u t I t e r a t o r l a s t, U n a r y P r e d i c a t e p ) { f o r ( ; f i r s t!= l a s t ; ++f i r s t ) i f (! p ( f i r s t ) ) b r e a k ; f o r ( ; f i r s t!= l a s t ; ++f i r s t ) i f ( p ( f i r s t ) ) r e t u r n f a l s e ; r e t u r n t r u e ; }

Lajitteluun liittyvät operaatiot is_sorted ja is_sorted_until Ensimmäinen tarkistaa onko annettu väli lajiteltu pienin ensin -järjestykseen ( < -operaattorin mukaan) Mahdollista käyttää omaa vertailijaa Toinen etsii suurimman järjestyksessä olevan välin aloittaen alusta, paluuarvona iteraattori viimeiseen järjestyksessä olevaan alkioon

Keko-operaatiot Uutena is_heap_until Kuten edellä mainittu is_sorted_until

Minimi- ja maksimioperaatiot minmax - palauttaa suurimman ja pienimmän kahdesta, tai useammasta Käyttää vertailijaa comp tai < -operaattoria Parametriksi voidaan antaa myös initializer_list minmax_element, kuten minmax, mutta palauttaa elementit arvojen sijaan is_permutation, palauttaa tosi jos on olemassa sellainen permutaatio elementtien [f, l) välillä, joka vastaa d:stä alkavaa joukkoa

Numeeriset operaatiot iota, alustaa annetun välin aloittaen annetusta arvosta ja kasvattaen sitä ++-operaattorin mukaisesti http://en.cppreference.com/w/cpp/ algorithm/iota

Lambdat Eniten lambdoista hyötyvät STL:n algoritmien tehokäyttäjät. Lambdojen avulla algoritmeja voi käyttää lähes samalla tavalla kuin kirjoittaisi normaalin silmukan. Esimerkki.

Esimerkki for_each ( v. b e g i n ( ), v. end ( ), [ ] ( i n t v a l ) { cout << v a l << e n d l ; } ) ;

Kasuaarit Kuuluvat strutsilintujen lahkoon ainoana sukuna Elävät Australiassa ja sen lähisaaristossa Luokiteltu maailman vaarallisimmaksi linnuksi Ovat luonteeltaan agressiivisia

Perusopetus (ohj1, 2)? Oliokurssit Tiraka

http://www.cplusplus.com/reference/stl http://en.cppreference.com/w/cpp http://www.cprogramming.com/c++11/c+ +11-lambda-closures.html C++11 standardi Wikipedia