C++ programavimo kalba

Similar documents
C++ programavimo kalba

C++ programavimo kalba. Konstruktorius, destruktorius, klasių metodų modifikatoriai, objektų masyvai (4 paskaita)

Kas yra masyvas? Skaičių masyvo A reikšmės: Elementų indeksai (numeriai): Užrašymas Turbo Paskaliu: A[1] A[2] A[3] A[4] A[5]

Struktūrų sintaksė Struktūra tai vienodo arba skirtingo tipo kintamųjų rinkinys. Sintaksė: struct vardas { ; type1 var1; type2 var2;... typen varn; //

Parengė ITMM Artūras Šakalys 1

16. ŠABLONAI. int abs( int ); float fabs( float ); double dabs( double ),...

JAVA pagrindai Lek. Liudas Drejeris

C programavimo kalba. 5 paskaita (Funkcijos, masyvai)

Masyvai Javoje. Masyvai. Objektų talpyklos. Masyvo tipas. Deklaravimo pavyzdžiai. Deklaracija ir sukūrimas. Masyvo superklas - Object

C++ programavimo kalba

C programavimo kalba. 3 paskaita (Sąlygos ir ciklo operatoriai, funkcija scanf() )

Kodėl programą sudaro daug failų? Sukurtos tipinės funkcijų galėtų būti panaudojamos dar kartą; Sudaroma aiškesnė programos struktūra; Sudaroma galimy

C++ programavimo kalba

Elektroninis.lt šakninių sertifikatų diegimas

2017 m. pagrindinės sesijos informacinių technologijų valstybinio brandos egzamino programavimo užduoties galimi sprendimai

El. pašto konfigūravimas

Gijos. Gijų modelis Javoje. R.Vaicekauskas, OP, 2017

Come to the TypeScript

Interneto technologijų taikymai

Web servisai WSDL. Osvaldas Grigas

Redis Ma as, greitas, galingas. Specialiai VilniusPHP

Apletai (įskiepiai) Lekt. dr. Pijus Kasparaitis m. m. pavasario semestras.

C++ programavimo kalba

C++ programavimo kalba

ĮVADAS JVM Java Virtual Machine Java virtualios mašinos (JVM) JVM write once, run everywhere

HTML dokumentai. Praktinės užduotys

C++ programavimo kalba

Polimorfizmas. Lekt. dr. Pijus Kasparaitis m. m. pavasario semestras.

DUOMENŲ STRUKTŪROS IR ALGORITMAI. Rūšiavimo algoritmai (įterpimo, burbulo, išrinkimo)

Kompiuterių tinklai. IPv6 ir tuneliai

Trumpai-ilga istorija

Simboliai ir simbolių eilutės 2 val. Standartinės procedūros ir funkcijos darbui su simbolių eilutėmis

KRISTINA LAPIN PROGRAMAVIMAS PASKALIU IR C. II dalis MATEMATIKOS IR STATISTIKOS STUDIJŲ KRYPČIŲ PIRMO KURSO STUDENTAMS

Atminties technologijos

Paskirstytos atminties lygiagretusis programavimas Įvadas į MPI

Web technologijos. Hostingas JavaScript PHP

DTD aprašas gali būti XML failo viduje. Šiuo atveju jis įterpiamas į žymę DOCTYPE naudojant tokią sintaksę:

Projektas. .h failai Header failai (interface) .m failai Pačios programos failai ( .xib /.storyboard Vartotojo sąsajos failai

Principles of Computer Architecture Processors Lecture 1

Paveikslėliai. Lekt. dr. Pijus Kasparaitis m. m. pavasario semestras.

C++ 프로그래밍실습. Visual Studio Smart Computing Laboratory

STL: C++ Standard Library

Buferio perpildymo klaida Įvadas, techniniai klausimai

STL components. STL: C++ Standard Library Standard Template Library (STL) Main Ideas. Components. Encapsulates complex data structures and algorithms

Paprastų lentelių kūrimas

THE STANDARD TEMPLATE LIBRARY (STL) Week 6 BITE 1513 Computer Game Programming

double *pdouble1, *pdouble2, *pdouble3, double4;

OBJEKTŲ SAVYBIŲ MODELIO GRAFINIS REDAKTORIUS

Pasirenkamojo modulio kūrybinio darbo atlikimas ir vertinimas

Template based set of collection classes STL collection types (container types)

LOGINĖS DB SCHEMOS ATSTATYMAS NAUDOJANT JDBC

WWW aplikacijų saugumas 2

CS197c: Programming in C++

CSI33 Data Structures

WVGA :9 None. This is the only supported resolution for Windows Phone OS 7.1.

Collections (Java) Collections Framework

Computational Physics

Lectures 19, 20, 21. two valid iterators in [first, last) such that i precedes j, then *j is not less than *i.

Programavimas C kalba

G52CPP C++ Programming Lecture 18

Standard Template Library

ISO XML standarto pranešimų naudojimo taisyklės v.2.4

PHP PROGRAMOS EIGOS VYKDYMO VALDYMAS

ISO XML standarto pranešimų naudojimo taisyklės v.2.3

Due Date: See Blackboard

SSE2034: System Software Experiment 3

CS 103 Unit 12 Slides

Today. andyoucanalsoconsultchapters6amd7inthetextbook. cis15-fall2007-parsons-lectvii.1 2

Vilniaus universitetas Fizikos fakultetas Radiofizikos katedra R. Grigalaitis Programavimas (Programavimo C++ kalba paskaitų konspektas)

A.Kynienė. С, C++ kalbų ABC. Metodinė priemonė

C programos struktūra ir funkcijos

Didelės apimties svetainės optimizavimas taikant SEO principus

Chapter 5. The Standard Template Library.

Baltymų struktūrų modeliavimas naudojant HHpred ir SWISS-MODEL Laboratorinis darbas

Objektiškai Orientuotas Programavimas su C++

Purpose of Review. Review some basic C++ Familiarize us with Weiss s style Introduce specific constructs useful for implementing data structures

G52CPP C++ Programming Lecture 18. Dr Jason Atkin

ios Uždara operacinė sistema skirta tik Apple įrenginiams: iphone ipad ipod touch Apple TV

Lectures 11,12. Online documentation & links

Objektinis programavimas su C++ naudojant Qt 4

Redis. In-memory data structure store. Sergej Kurakin

Programming in C++ using STL. Rex Jaeschke

Due Date: See Blackboard

KOMPIUTERIŲ TINKLAI. 5 paskaita Tinklo lygmuo, IP protokolas

Lokalizuojamųjų programinės įrangos išteklių metainformacijos formalizavimo metodas

2-3 PASKAITOS. Paprasčiausia programa:

STL Standard Template Library

I. FFDATA STRUKTŪROS APRAŠYMAS

I.SAF DUOMENŲ RINKMENOS XML STRUKTŪROS APRAŠO SPECIFIKACIJA

Intermediate Programming, Spring 2017*

KAUNO TECHNOLOGIJOS UNIVERSITETAS

II SEKCIJA. Duomenų bazės ir modeliai

Tautvydas Dagys Microsoft Lietuva

Aleph skaitytojų duomenų bazė XML formato duomenų failas Failo formavimo taisyklės I dalis. Bendroji skaitytojo informacija...

Amadeus On-Line Helpdesk

Uždavinių sprendimas MATLAB aplinkoje

K R I S T I N A L A P I N. I dalis. Matematikos ir statistikos studijų krypčių pirmo kurso studentams

CS 103 Unit 15. Doubly-Linked Lists and Deques. Mark Redekopp

PHP Lietuviškai. Turinys

Standard Template Library. Containers, Iterators, Algorithms. Sequence Containers. Containers

Transcription:

C++ programavimo kalba Standartinė šablonų biblioteka (STL) Duomenų struktūros (11paskaita)

Šablonai Programuojant egzistuoja situacijos, kai reikia atlikti tuos pačius veiksmus su skirtingais duomenų tipais (pvz. modulio radimas, kėlimas laipsniu). Tam patogu naudoti šablonines arba parametrizuotas funkcijas ir klases. Funkijos šablono sintaksė template <typename identifier> funkcijos_deklaravimas template <class identifier> funkcijos_deklaravimas Klasės šablono sintaksė template <class Tipas> class klasės_pavadinimas { ; 2

Standartinė šablonų biblioteka (STL) C++ klasės sudaro puikią galimybę klasių pagalba kurti duomenų struktūrų bibliotekas, dėl to C++ standarte yra įtraukta konteinerinių klasių biblioteka. Siekiant platesnio tokių klasių pritaikomumo, klasės bibliotekoje apibrėžtos kaip šabloninės, todėl biblioteka buvo pavadinta standartine šablonų biblioteka (Standard Template Library). STL autoriai A.Stepanov ir M.Lee (Hewlett Packard). STL tai konteinerinių (saugojimo) šabloninių klasių (vektoriai, sąrašai, eilės, stekai, dekai) ir bendro pobūdžio šabloninių funkcijų-algoritmų (rūšiavimo, paieškos, kopijavimo) biblioteka. STL įtraukta į C++ standartą ir platinama nemokamai. STL tikslas taupyti programuotojų darbą ir suteikti galimybę naudotis jau sukurtais ir patikimai veikiančiais klasių bei funkcijų šablonais. 3

Standartinė šablonų biblioteka (STL) STL branduolį sudaro: Konteineriai tai klasės, skirtos duomenims saugoti kompiuterio atmintyje. Duomenys gali būti tipiniai (int, float...) arba objektai. Konteineriai tai šabloninės klasės, kurios gali saugoti be kokio tipo duomenis. Konteinerių tipai: Nuoseklūs konteineiriai; Asociatyviniai konteineriai. Algoritmai tai procedūros (funkcijos), kurios taikomos konteinerio duomenų apdorojimui pvz. rūšiavimui, kopijavimui, paieškai. Algoritmai tai šabloninės funkcijos. Šios funkcijos nepriklauso konteinerinėms klasėms; Iteratoriai tai apibendrintos rodyklės, jungiančios algoritmus ir konteinerių elementus. Didinant ar mažinant iteratoriaus reikšmę, pasiekiamas vis kitas konteinerio elementas. 4

Konteineriai, algoritmai, iteratoriai Konteineris Konteineris Objektai Algoritmas Objektais Iteratorius Iteratorius Iteratorius Algoritmas Iteratorius 5

Duomenų sąrašai Konteinerinės šabloninės klasės siejamos su duomenų sąrašais, todėl toliau bus pateikta bazinė informacija apie duomenų sąrašus. Sąrašais vadinami tokie duomenų rinkiniai, kurių elementus apibūdina ne tik jų reikšmės, bet ir tvarkymo taisyklės bei ryšiai tarp elementų. Keičiant elementų tipus, ryšių tarp elementų būdus ir tvarkymo taisykles, galima sudaryti daugybę įvairių tipų sąrašų (eiles, stekus, dekus, medžius). Paprasčiausi yra statiniai sąrašai, kurie gali būti realizuojami statiniuose masyvuose, papildant juos tvarkymo procedūromis ir užpildymo charakteristika. Tačiau universalesnė sąrašų sudarymo priemonė yra dinaminės struktūros, kurios sudarytos iš elementų su nuorodomis. Tokiuose elementuose saugomos ne tik jų reikšmės, bet ir ryšio su kitais elementais aprašymai. Taip charakterizuojami dinaminiai sąrašai. 6

Duomenų sąrašai Iš elementų, kurių ryšio dalyje yra tik viena rodyklė, galima sudaryti tik tiesinius sąrašus dar vadinamus nuosekliai sujungtomis grandinėmis. Papildant tiesinius sąrašus tvarkymo procedūromis ir išorinio ryšio priemonėmis, galima sudaryti tokias tipines jų modifikacijas: sąrašus, kuriuose nėra apribojimų sąrašo elementų analizei, tvarkymui ir apdorojimui; eiles, kuriose nauji elementai prijungiami sąrašo gale, o skaitymui yra prieinamas tik pirmasis elementas (FIFO First In, First Out); stekus, kuriuose galima skaityti tik vėliausiai įrašytą elementą (LIFO Last In, First Out); dekus, kuriuose elementai gali būti rašomi ir skaitomi tiek sąrašo pradžioje, tiek gale (DEQUE Double-Ended QUEue). Tokios sąrašinės struktūros plačiai vartojamos ne tik taikomosiose, bet ir sisteminėse programose. Pavyzdžiui, stekuose yra saugomi pertraukiamų procesų parametrai, organizuojami lokalūs duomenys. Eilės yra populiari pagalbinių (buferinių) atminčių, kuriose kaupiami iš lėtų įrenginių gaunami arba į juos siunčiami duomenys, organizavimo priemonė. 7

Duomenų sąrašai Kiekvieno sąrašo tipo realizavimui skirta dinaminė struktūra turi turėti jos elementus aprašančią struktūrą, rodyklę arba rodykles į išoriniams ryšiams skirtus elementus ir tokias tvarkymo operacijas: naujo sąrašo sukūrimo; naujo elemento prijungimo; elemento pašalinimo; sąrašo skaitymo ir analizės; sąrašo tvarkymo. Sudarant sąrašų tvarkymo procedūras, reikalingas papildomas susitarimas apie tai, kaip bus žymima sąrašo pabaiga ir kaip bus žymimas tuščias sąrašas. Yra priimta tiek sąrašo pabaigą, tiek tuščią sąrašą dinaminėse struktūrose žymėti nuline rodykle NULL. Duomenų sąrašai gali būti realizuojami naudojant struktūras, tačiau C++ programavimo kalboje tam naudojamos klasės. 8

Stekas Steko grafinis vaizdas parodytas stačiakampiais elementais, padalintais į tiek dalių, kiek yra laukų jo struktūroje: t.y. duomenų ir adreso. Duomenų lauke saugomos reikšmės. Rodyklės tipo lauke saugomas adresas (nuoroda) į kitą sąrašo elementą. Nuoroda pavaizduota linija su rodykle gale. Tos linijos pradžia yra nuorodos lauko viduje. Rodyklė remiasi į elementą vaizduojantį stačiakampį bet kurioje vietoje. Jeigu nuoroda neegzistuoja, tuomet linija nėra brėžiama ir laukas lieka tuščias. 9

Steko programos pavyzdys #include <iostream> #include <fstream> using namespace std; // Struktūros tipo apibrėžimas typedef struct list { int sk; struct list *next; sar; // Klasės Dinsar apibrėžimas class DinSar { sar *P; // Sąrašo pradžia //struct list { int sk; struct list *next; *P; - galima ir taip ; public: DinSar(); ~DinSar(); void Formuoti(ifstream); void Elementas(int); void Spausdinti(); // Konstruktorius // Destruktorius // Formuoja sąrašą // Prijungia elementą // Spausdina sąrašą 10

Steko programos pavyzdys // Pagrindinė programa void main() { ifstream D; DinSar A; // Klasės DinSar objektas D.open("Duom.dat"); if (D == NULL) { cout << "Failo 'Duom.dat' nepavyko atidaryti"; exit (1); A.Formuoti(D); // Formuojamas sąrašas D.close(); A.Spausdinti(); // Spausdinamas sąrašas A.~DinSar(); 11

Steko programos pavyzdys // Konstruktorius DinSar::DinSar() { P = NULL; // Destruktorius DinSar::~DinSar() { sar *D = P; while(p!= NULL) { D = P; // Rodyklė į naikinamą elementą P = P->next; // Kito elemento adresas delete( D ); // Elemento naikinimas // Formuoja netiesioginį sąrašą void DinSar::Formuoti(ifstream F) { int k; while(f.eof()) { F >> k; Elementas(k); // Prijungia elementą void DinSar::Elementas(int Sk) { sar *R; R = new sar; // Naujo elemento sukūrimas R->sk = Sk; // Užpildymas duomenimis R->next = P; // Prijungimas prie sąrašo P = R; // Sąrašo pradžios pakeitimas // Sąrašo spausdinimas void DinSar::Spausdinti() { sar *D = P; while(d!= NULL) { cout << D->sk << " "; // Reikšmės spausdinim. D = D->next; // Kito elemento adresas cout << "\n"; 12

STL konteineriai (saugojimo klasės) Konteineriai (saugojimo klasės) tai šabloninės klasės, skirtos duomenų saugojimui, paieškai... Konteinerių privalumas didesnis duomenų apdorojimo greitis. Masyvais C++ laikomas duomenų saugojimo būdas, kai jo elementų skaičius apibrėžiamas iš anksto. Pavyzdžiui: int A[10]; STL apibrėžia 7 konteinerių tipus, kurie skirstomi į dvi kategorijas: nuoseklūs ir asociatyviniai. Nuoseklūs konteineriai (tiesiniai sąrašai) vektoriai (vector) sąrašai (list) dekai (deque) stekai (stack) eilės (queue) prioritetinės eilės (priority_queue) Asociatyviniai konteineriai: map multimap set multiset 13

Nuoseklūs konteineriai (vektoriai) Nuosekliuose konteineriuose saugomi duomenys gali būti įsivaizuojami kaip pvz. linija namų gatvėje. Visi elementai turi savo poziciją bei kaimynus. Vektoriai tai konteinerinė klasė, kurios elementai pasiekiami pagal indeksą. Vektoriai panašūs į vienmačius masyvus, tačiau jie yra dinaminiai bei užtikrina indeksų kontrolę. Vektorių klasė apibrėžta antraštės faile vector.h ir naudoja std vardų erdvę. #include <iostream> #include <vector> using namespace std; void main() { vector<int> v; // sudaromas nulinio ilgio vektorius for (int i = 0; i<5; i++) v.push_back(i); // papildomas vektorius elementu, vektoriaus gale cout<< Vektoriaus dydis <<v.size() << endl; for (i=0; i<v.size(); i++) cout<< v[ i ]<<endl; 14

Pagrindinės vektorių funkcijos #include <iostream> #include <vector> using namespace std; void main() { double arr[ ]= {1.1, 2.2, 3.3, 4.4 ; vector<double> v1 (arr, arr+4) ; // sudaromas vektorius while (! v1.empty () ) { cout<< v1.back() <<endl; // išvedamas paskutinis elementas v1.pop_back(); // pašalinamas paskutinis elementas for (int i = 0; i<5; i++) v.push_back(i); // pridedamas elementas į galą v1.insert (v1.begin()+2, 2.5) // įterpiamas 2.5 po antrojo elemento v1.erase (v1.begin()+2 ) // ištrinamas trečias elementas cout<< Vektoriaus dydis <<v.size() << endl; for (i=0; i<v1.size(); i++) cout<< v1[i]<<endl; // pridedamas elementas į galą 15

Nuoseklūs konteineriai (sąrašai) Sąrašai (lists) tai nuoseklūs konteineriai, optimizuoti situacijoms, kai reikia įterpti arba pašalinti objektą. Pvz. turime darbuotojų sąrašą, saugomą abėcėlės tvarka. Sujungti sąrašai (Linked list) tai lanksti duomenų saugojimo būdas, nenaudojant masyvų. Čia naudojami struktūra kurioje saugomi duomenys ir rodyklės. Rodyklė saugo adresą sekančio sąrašo elemento. Dvigubai sujungti sąrašai (Double linked list) tai sąrašas, kuriame saugomos dvi rodyklės t.y. abiejų kaimyninių elementų adresai. Sąrašų privalumas neribojamas sąrašo dydis, greita paieška. Sarašo klasė apibrėžta antraštės faile list.h ir naudoja std vardų erdvę. 16

Nuoseklūs konteineriai (sąrašai) #include <iostream> #include <list> using namespace std; void main() { list<int> ilist; ilist.push_back(30); // elementai talpinami sąrašo gale ilist.push_back(40); ilist.push_front(20); // elementai talpinami sąrašo priekyje ilist.push_front(10); ilist.push_front (10); ilist.unique() // pašalina dublikuotus elementus ilist.reverse() // sukeičia eiliškumą t.y. 40, 30, 20, 10 cout<< Saraso dydis <<ilist.size() << endl; for (int i=0; i < ilist.size(); i++) { cout<< ilist.front() <<endl; // skaitomi elementai iš priekio ilist.pop_front(); // trinami elementai iš priekio 17

Dekai Dekai tai vektorių ir sąrašų kombinacija. Į dekus, kaip ir į vektorius galima kreiptis per indeksą [ ], tačiau dekų elementai kaip ir sąrašų gali būti pasiekiami tiek ir pradžios tiek ir iš galo. Dekas tai double ended vector (Double Ended QUEue), palaikantys funkcijas push_front(), pop_front(), front(). Atminties rezervavimas skirtingas nei vektorių ar sąrašų. Vektoriai visada rezervuoja nuoseklų atminties segmentą. Dekai gali saugoti duomenis atskiruose segmentuose. Dekų klasė apibrėžta antraštės faile deque.h ir naudoja std vardų erdvę. void main() { deque<int> deq; deq.push_back(30); // elementai talpinami deko gale deq.push_back(40); deq.push_front(20); deq.push_front(10); deq[2] = 33; // trečias deko elementas 33 for (int i=0; i < deq.size(); i++) { cout<< deq[ i] <<endl; // išvedami elementai 18

Trumpai 19