Ćwiczenia IV - Kontenery (pojemniki)



Podobne dokumenty
Algorytmy i Struktury Danych.

Programowanie obiektowe w C++ Wykład 11

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Kontenery. Wykład 12. Programowanie (język C++) Rodzaje kontenerów. Przegląd kontenerów

Programowanie i struktury danych

Wartości domyślne, szablony funkcji i klas

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

EGZAMIN MATURALNY Z INFORMATYKI 19 MAJA 2015

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

STOWARZYSZENIE LOKALNA GRUPA DZIAŁANIA JURAJSKA KRAINA REGULAMIN ZARZĄDU. ROZDZIAŁ I Postanowienia ogólne

ASD - ćwiczenia III. Dowodzenie poprawności programów iteracyjnych. Nieformalnie o poprawności programów:

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie


Regulamin Pracy Komisji Rekrutacyjnej w Publicznym Przedszkolu Nr 5 w Kozienicach

Praca na wielu bazach danych część 2. (Wersja 8.1)

Regulamin rekrutacji do Gimnazjum w Chwaliszewie na rok szkolny 2016/2017

Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI)

Stowarzyszenie Lokalna Grupa Działania EUROGALICJA Regulamin Rady

Przykład implementacji przeciażeń operatorów problem kolizji

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

Elementy cyfrowe i układy logiczne

Uchwała Nr... Rady Miejskiej Będzina z dnia roku

UNIWERSYTET MARII CURIE-SKŁODOWSKIEJ WYDZIAŁ MATEMATYKI, FIZYKI I INFORMATYKI INSTYTUT INFORMATYKI. Wprowadzenie do STL.

Bazy danych. Andrzej Łachwa, UJ, /15

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Zarządzenie Nr 1469/2012

ROZPORZĄDZENIE MINISTRA PRACY I POLITYKI SPOŁECZNEJ 1)

Kurs programowania. Wykład 9. Wojciech Macyna

SpedCust 5 instrukcja instalacji

Wypełniają je wszystkie jednostki samorządu terytorialnego, tj. gminy, powiaty, województwa, miasta na prawach powiatu oraz związki komunalne.

InsERT GT Własne COM 1.0

Temat: Funkcje. Własności ogólne. A n n a R a j f u r a, M a t e m a t y k a s e m e s t r 1, W S Z i M w S o c h a c z e w i e 1

Kontenery, algorytmy

Instrukcja. sporządzania rocznych sprawozdań Rb-WSa i Rb-WSb o wydatkach strukturalnych

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Laboratorium Podstawy Przetwarzania Rozproszonego SPRAWOZDANIE z zadania SERWIS KOMPUTEROWY

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

STL: Lekcja 1&2. Filozofia STL

Regulamin szkolnego konkursu matematycznego dla uczniów klasy II i III: Mały Matematyk

EGZAMIN MATURALNY Z INFORMATYKI 17 MAJA 2016

Mapa umiejętności czytania, interpretacji i posługiwania się mapą Polski.

UCHWAŁA NR./06 RADY DZIELNICY PRAGA PÓŁNOC M. ST. WARSZAWY

Uchwała nr 21 /2015 Walnego Zebrania Członków z dnia w sprawie przyjęcia Regulaminu Pracy Zarządu.

Zasady rekrutacji dzieci do I klasy Szkoły Podstawowej im. hm. Janka Bytnara Rudego w Lubieniu Kujawskim na rok szkolny 2014/2015*

REGULAMIN PRACY ZARZĄDU GDAŃSKIEJ ORGANIZACJI TURYSTYCZNEJ (GOT)

Funkcje składowe (metody)

obiekty funkcyjne - funktory

STL: kontenery. Typy kontenerów STL. STL: kontenery. STL: kontenery. STL: kontenery. Typy kontenerów STL. deque (double-ended queue) list

Na podstawie art.4 ust.1 i art.20 lit. l) Statutu Walne Zebranie Stowarzyszenia uchwala niniejszy Regulamin Zarządu.

MATEMATYKA 4 INSTYTUT MEDICUS FUNKCJA KWADRATOWA. Kurs przygotowawczy na studia medyczne. Rok szkolny 2010/2011. tel

Konfiguracja historii plików

Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

DZIENNIK USTAW RZECZYPOSPOLITEJ POLSKIEJ

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

OPIS PRZEDMIOTU ZAMÓWIENIA DO ZAPYTANIA KE1/POIG 8.2/13

Aby ułatwić współdzielenie oferty noclegowej w różnych obiektach oraz agregatorach ofert i zestandaryzować ten proces

Formularz Zgłoszeniowy propozycji zadania do Szczecińskiego Budżetu Obywatelskiego na 2016 rok

W przypadku STL w specyfikacji nazwy pliku nagłówkowego brak rozszerzenia tj. <string> <string.h> zamiast

Kompletna dokumentacja kontenera C++ vector w -

ZASADY REKRUTACJI DO ODDZIAŁÓW PRZEDSZKOLNYCH I KLAS PIERWSZYCH

INFORMATOR TECHNICZNY WONDERWARE

Rady Miejskiej Wodzisławia Śląskiego. w sprawie stypendiów dla osób zajmujących się twórczością artystyczną i upowszechnianiem kultury.

Kontrakt Terytorialny

PAKIET MathCad - Część III

Spis treści INTERFEJS (WEBSERVICES) - DOKUMENTACJA TECHICZNA 1

REGULAMIN RADY RODZICÓW Liceum Ogólnokształcącego Nr XVII im. A. Osieckiej we Wrocławiu

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, Warszawa

Organizator badania biegłości ma wdrożony system zarządzania wg normy PN-EN ISO/IEC 17025:2005.

Regulamin rekrutacji uczniów do Szkoły Podstawowej nr 35 im. Władysława Łokietka w Zespole Szkolno-Przedszkolnym nr 1 w Poznaniu na rok szkolny

II. WNIOSKI I UZASADNIENIA: 1. Proponujemy wprowadzić w Rekomendacji nr 6 także rozwiązania dotyczące sytuacji, w których:

Modele i narzędzia optymalizacji w systemach informatycznych zarządzania

RZECZPOSPOLITA POLSKA MINISTER CYFRYZACJI

WZÓR. reprezentowaną przez: Pana/ią osobę uprawnioną, zwaną dalej Wykonawcą, posiadającym NIP.. oraz REGON.

- o zmianie o Krajowym Rejestrze Sądowym

ROZPORZĄDZENIE MINISTRA ROLNICTWA I ROZWOJU WSI 1) z dnia r.

Wtedy wystarczy wybrać właściwego Taga z listy.

Strategia rozwoju kariery zawodowej - Twój scenariusz (program nagrania).

Przerobił mgr farm. Konrad Okurowski, OIA Olsztyn. Dz.U

Ogłoszenie o zwołaniu Nadzwyczajnego Walnego Zgromadzenia Spółki na dzień 27 czerwca 2016 r.

Załącznik do zarządzenia Rektora Krakowskiej Akademii im. Andrzeja Frycza Modrzewskiego Nr 8/2013 z 4 marca 2013 r.

oraz nowego średniego samochodu ratowniczo-gaśniczego ze sprzętem ratowniczogaśniczym

Uchwała nr 647/XXV/2012 Rady Miejskiej w Piasecznie z dnia r.

AUDYT WEWNĘTRZNEGO SYSTEMU ZAPEWNIENIA JAKOŚCI KSZTAŁCENIA

(Tekst mający znaczenie dla EOG)

Załącznik do Uchwały 66 Komitetu Monitorującego PROW z dnia 16 grudnia 2011 r. Lp. Dotyczy działania Obecny tekst Tekst po zmianie

WZÓR SKARGI EUROPEJSKI TRYBUNAŁ PRAW CZŁOWIEKA. Rada Europy. Strasburg, Francja SKARGA. na podstawie Artykułu 34 Europejskiej Konwencji Praw Człowieka

AKADEMIA MORSKA W SZCZECINIE

Matematyka dla liceum/funkcja liniowa

(opracował: Ł. Skonecki)

2 Zarządzenie wchodzi w życie z dniem podpisania.

Regulamin. Rady Nadzorczej Spółdzielni Mieszkaniowej "Doły -Marysińska" w Łodzi

Warszawa, dnia 11 marca 2016 r. Poz. 327 ROZPORZĄDZENIE. z dnia 7 marca 2016 r.

Instrukcja instalacji oraz wykorzystania podpisu cyfrowego

Centrum Informatyki "ZETO" S.A. w Białymstoku. Instrukcja użytkownika dla urzędników nadających uprawnienia i ograniczenia podmiotom w ST CEIDG

UCHWAŁA NR XLI/447/2013 RADY MIEJSKIEJ GÓRY KALWARII. z dnia 28 maja 2013 r.

Procedura nadawania uprawnień do potwierdzania, przedłuŝania waŝności i uniewaŝniania profili zaufanych epuap. Załącznik nr 1

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Sieć komputerowa grupa komputerów lub innych urządzeo połączonych ze sobą w celu wymiany danych lub współdzielenia różnych zasobów, na przykład:

Transkrypt:

Ćwiczenia IV - Kontenery (pojemniki) 28 października 2010 Kontener Kontener jest to obiekt który zawiera w sobie obiekty innej klasy i ma zdefiniowane metody nimi zarządzające. Jednym z najprostszych przykładów kontenera jest: class A{ Object szuflada; public: void wloz(object cos); Object wyjmij(); Kontenery służą też m.in. do utrzymania ustalonego porządku przechowywania obiektów, np. można uporządkowywać w czasie wstawiania wydrukowane artykuły: class Artykul{ public: string tytul; string autor; string tekst; class A{ Artykuly[100] szuflada; public: void wloz(artykul a); Artykul wyjmij(string tytul); STL Jest to ustandaryzowana biblioteka szablonów (Standard Template Library), która zawiera definicje szeregu struktur danych dowolnego typu i operacji na nich. Dostępne kontenery: list lista vector wektor deque tablica podwójnie kończona bitset tablica bitowa set zbiór

multiset zbiór oparty na wielu kluczach map mapa poszukiwań multimap wielokrotna mapa poszukiwań oraz adaptery kontenerowe, czyli struktury mające na celu udostępnienie określonego interfejsu (pewnej logiki myślenia) operujące na zdefiniowanych kontenerach. stack stos queue kolejka priority queue kolejka priorytetowa Iteratory kontenerze. Iterator to obiekt umożliwiający sekwencyjny dostęp do danych w danym vector Jest to liniowo uporządkowany kontener wspierający swobodny dostęp do każdego z elementów, stały czas wstawiania i usuwania elementów z końca i liniowy z pozostałych miejc. Liczbę jego elementów można zmieniać dynamicznie. Kontener sam zarządza potrzebną pamięcią. Jest często używany ze względu na wydajność. #include<vector> #include<iostream> using namespace std; int main(int argc, char** argv){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); vector<int>::iterator a = v.begin(); while(a!= v.end()){ cout << *a << endl; a++; cout << "---" << endl; v.pop_back(); a = v.begin(); while(a!= v.end()){ cout << *a << endl; a++; cout << "---" << endl; 2

cout << v.front() << endl; cout << v.back() << endl; cout << v.size() << endl; cout << v.capacity() << endl; cout << "---" << endl; v.pop_back(); a = v.begin(); v.erase(a); v.insert(v.begin(), 8); a = v.begin(); while(a!= v.end()){ cout << *a << endl; a++; return 0; Czytaj: http://www.sgi.com/tech/stl/vector.html stack - stos Jest to szablon, który przechowuje elementy na zasadzie stosu. Przykład int main() { stack<int> S; S.push(8); S.push(7); S.push(4); assert(s.size() == 3); assert(s.top() == 4); S.pop(); assert(s.top() == 7); S.pop(); assert(s.top() == 8); S.pop(); assert(s.empty()); 3

queue - kolejka Jest to szablon, który działa na zasadzie kolejki FIFO. Przykład int main() { queue<int> Q; Q.push(8); Q.push(7); Q.push(6); Q.push(2); assert(q.size() == 4); assert(q.back() == 2); assert(q.front() == 8); Q.pop(); assert(q.front() == 7); Q.pop(); assert(q.front() == 6); Q.pop(); assert(q.front() == 2); Q.pop(); assert(q.empty()); list Jest to kontener odzworowujący listę dwukierunkową. Jest podobny do vector, ale dodatkowo wstawianie, czy podział na fragmenty nie zakłóca iteratorów, prócz tych wskazujących na usuwany element. list<int> lst; int i; for(i = 0; i < 10; i++) lst.push_back(rand()); cout << "Lista: "; list<int>::iterator p = lst.begin(); while(p!= lst.end()){ cout << *p << " "; p++; cout<<endl; 4

Czytaj: http://www.sgi.com/tech/stl/list.html set Jest to uporządkowany kontener asocjacyjny, czyli kojarzący klucze z wartościami, jakie przechowuje. Aby był on uporządkowany, należy mu zdefiniować funkcję porządkującą. #include<set> #include<iostream> #include<string.h> #include<stdio.h> using namespace std; struct ltstr{ bool operator()(const char* s1, const char* s2) const{ return strcmp(s1, s2) < 0; ; int main(int argc, char** argv){ const int N = 6; const char* a[n] = {"isomer", "ephemeral", "prosaic", "nugatory", "artichoke", "serif"; set<const char*, ltstr> A(a, a + N); set<const char*>::iterator i = A.begin(); while(i!= A.end()){ cout << *i << endl; i++; cout<< "---"<< endl; set<const char*> B(a, a + N); set<const char*>::iterator j = B.begin(); while(j!= B.end()){ cout << *j << endl; j++; return 0; Czytaj: http://www.sgi.com/tech/stl/set.html 5

map Jest to uporządkowany kontener asocjacyjny. Jego wartością jest para < klucz, warto >. Żadne dwa elementy nie mają tego samego klucza. Wstawianie/usuwanie elementów nie narusza iteratorów, prócz wskazującego na element usuwany. struct ltstr{ bool operator()(const char* s1, const char* s2) const{ return strcmp(s1, s2) < 0; ; int main(){ map<const char*, int, ltstr> months; months["january"] = 31; months["february"] = 28; months["march"] = 31; months["april"] = 30; months["may"] = 31; months["june"] = 30; months["july"] = 31; months["august"] = 31; months["september"] = 30; months["october"] = 31; months["november"] = 30; months["december"] = 31; cout << "june -> " << months["june"] << endl; map<const char*, int, ltstr>::iterator cur = months.find("june"); map<const char*, int, ltstr>::iterator prev = cur; map<const char*, int, ltstr>::iterator next = cur; ++next; --prev; cout << "Previous (in alphabetical order) is " << (*prev).first << endl; cout << "Next (in alphabetical order) is " << (*next).first << endl; return 0; Czytaj: http://www.sgi.com/tech/stl/map.html Zadania 1. Zad. 1. Znajdź informację na temat rodzajów iteratorów i wskaż między nimi różnice. 2. Zad. 2. Napisz program, który wczytuje ze standardowego wejścia (klawiatury) 20 słów, umieszczając je w kontenerze vector i wypisuje je z powrotem na ekran. 3. Zad. 3. Zmodyfikuj poprzednie zadanie: zamiast kontenera vector użyj stack. 6

4. Zad. 4. Zmodyfikuj poprzednie zadanie: zamiast kontenera stack użyj set. 5. Zad. 5. (zadanie do przesłania na adres mejl) Napisz program, który będzie wczytywał ze standardowego wejścia dane w formacie: imię wiek gdzie wiek to liczba naturalna oznaczająca wiek o osoby o podanym imieniu. Każda taka para (imię oraz wiek), znajduje się w oddzielnym wierszu wejścia. Program powinien zapisywać wszystkie wczytane dane do kontenera map. Zadaniem jest wypisanie imion i wieku osób po upływie 12 miesięcy (w tym samym formacie: imie wiek ). Przykład: Jan 30 Jan 31 6. Zad. 6. - Wektory. Układ współrzędnych. Zaprogramuj rozwiązywanie układu współrzędnych z dwiema niewiadomymi metodą wyznacznikową przy użyciu kontenera vector. 7. Zad. 7. - Listy. Artykuły Dla klasy Artykul zdefiniuj kontener zawierający artykuły i układający je alfabetycznie względem nazwy. Zastosuj wyszukiwanie bisekcyjne. 8. Zad. 8. - Listy. Imiona. Należy wczytać listę imion i sortować ją ręcznie przy wstawianiu. Wczytywanie kończy pusta linia, po czym należy wydrukować na ekran posortowaną listę. 9. Zad. 9. - Zbiory. Liczby parzyste. Dla losowo wybieranych liczb naturalnych należy: przechowywać każdą wybraną liczbę w kontenerze umożliwiającym zachowanie wielokrotności wylosowanych liczb. jeśli jest parzysta i nie należy do zbioru - to dodajemy ją do zbioru liczb parzystych wybranych jeśli jest parzysta i należy do zbioru - należy ją z niego usunąć jeśli jest nieparzysta, to odrzucamy Należy śledzić wszytkie dokonywane kroki poprzez instrukcje szlakowe. 10. Zad. 10. - Kodowanie. Zaprogramuj aplikację, która dla podanego z parametrów łańcucha zwróci łańcuch zakodowany wg poniższych zasad: (a) kodowane są tylko litery łacińskie 7

(b) słownik składa się z par Litera > Litera. Kodowanie będzie polegało na wymianie w otrzymanym łańcuchu liter wg stworzonego słownika. (c) słownik jest pełny i jednoznaczny, czyli każda litera ma swój nowy zamienników i nie może być zarówno dwóch różnych zamienników dla jednej litery, jak i jednego zamiennika dla dwóch różnych liter. Słownik należy zbudować losowo. Przykład: dla słownika: A > B, L > T, etc., dla słowa ALA otrzymujemy BTB. 11. Zad. 11. - Dekodowanie Zaprogramować aplikację dekodującą taki łańcuch. Słownik należy wczytać z samodzielnie opracowanego pliku. Linki http://cplusplus.com/reference/stl/ http://kursy.ddt.pl/?lessonid=235 http://www.linuxsoftware.co.nz/cppcontainers.html 8