Kompletna dokumentacja kontenera C++ vector w - http://www.cplusplus.com/reference/stl/vector/



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

Programowanie i struktury danych

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

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

STL: Lekcja 1&2. Filozofia STL

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

STL Standardt Template Library (wprowadzenie)

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Algorytmy i struktury danych

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

STL Standard Template Library

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

Struktury danych (I): kolejka, stos itp.

INFORMATYKA SORTOWANIE DANYCH.

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Java Collections Framework

Jeszcze o algorytmach

1. Kalkulator czterech działań. 2. Konwersja ciągu znaków do tablicy.

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

Struktury danych: stos, kolejka, lista, drzewo

Struktury Danych i Złożoność Obliczeniowa

Lista, Stos, Kolejka, Tablica Asocjacyjna

Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Tabela wewnętrzna - definicja

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Kolekcje. Na podstawie:

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Kurs programowania. Wykład 9. Wojciech Macyna

Algorytm i złożoność obliczeniowa algorytmu

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

Algorytmy i Struktury Danych.

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

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

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Języki programowania imperatywnego

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

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

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Kolekcja (kontener) to po prostu obiekt, który grupuje wiele elementów w jeden twór.

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Podział algorytmów ze względu na obszar zastosowań. algorytmy numeryczne (matematyczne) wykonują obliczenia arytmetyczne, algorytmy przeszukujące

Zadanie projektowe nr 1

Ćwiczenia IV - Kontenery (pojemniki)

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Algorytmy sortujące i wyszukujące

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Podstawy obiektowości

Podstawy Programowania

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

if (wyrażenie ) instrukcja

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Zaawansowane algorytmy i struktury danych

Algorytmy i Struktury Danych

Kolekcje mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Wyszukiwanie binarne

Opisy efektów kształcenia dla modułu

Haszowanie. dr inż. Urszula Gałązka

Wprowadzenie do złożoności obliczeniowej

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Algorytmika i pseudoprogramowanie

Złożoność obliczeniowa zadania, zestaw 2

Języki i techniki programowania Ćwiczenia 2

java.util.* :Kolekcje Tomasz Borzyszkowski

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Programowanie Komponentowe Zarządzanie obiektami: kontenery

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Programowanie Obiektowo Zorientowane w języku C++ Biblioteka STL

Struktury Danych i Złożoność Obliczeniowa

Funkcje wyszukiwania i adresu PODAJ.POZYCJĘ

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

1. Informatyka - dyscyplina naukowa i techniczna zajmująca się przetwarzaniem informacji.

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Logiczny model komputera i działanie procesora. Część 1.

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Informatyka 1. Złożoność obliczeniowa

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Biblioteka standardowa C++

Maciej Piotr Jankowski

Jak Windows zarządza pamięcią?

Laboratorium 5: Tablice. Wyszukiwanie binarne

I. Podstawy języka C powtórka

Dynamiczne struktury danych

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

7. Pętle for. Przykłady

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

Programowanie obiektowe

Podręcznik użytkownika Wprowadzający aplikacji Wykaz2

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Algorytmy i struktury danych. wykład 5

Technologie informacyjne Wykład VII-IX

Transkrypt:

STL, czyli o co tyle hałasu W świecie programowania C++, hasło STL pojawia się nieustannie i zawsze jest o nim głośno... często początkujące osoby, które nie znają STL-a pytają się co to jest i czemu go tak wszyscy zachwalają. Bardzo często spotykamy się z następującą odpowiedzią: STL jest to zbiór kontenerów, iteratorów i algorytmów - naprawdę świetna sprawa, nie wiem jak bez tego można pisać programy... - ale co to tak naprawdę znaczy? Ostatni termin tj. algorytmy jest zrozumiały, jednak algorytmy w STL-u nie powalają z nóg... raczej można powiedzieć, że biblioteka ta jest uboga, a co gorsza nie ma tam nic co mogłoby się przydać bezpośrednio do gier (np. algorytmy wykrywania kolizji itp - tego w STL-u nie znajdziesz). Definicja kontenera Kontener jest to struktura danych, która służy do przechowywania danych w zorganizowany sposób. Wszystkie elementy kontenera muszą być takiego samego typu. Każdy kontener umożliwia nam wykonanie takich operacji jak: uzyskanie dostępu do danych w kontenerze; możliwość dodawania elementów do kontenera; możliwość usuwania elementów z kontenera. Niektóre z nich dają nam również możliwość wyszukiwania elementu w kontenerze. Kontenery w zależności od przyjętej organizacji danych różnią się szybkością wykonywania poszczególnych operacji. Dokumentacja kontenera vector Kompletna dokumentacja kontenera C++ vector w - http://www.cplusplus.com/reference/stl/vector/ Co to jest vector? Vector jest to tak zwany kontener na dane (pojemnik), inaczej dynamiczna tablica. W owej tablicy mamy dostęp do każdego jej elementu oraz możemy w każdym momencie zwiększać jej wielkość. Jakimi funkcjami posługujemy się używając vectora? push_back(); - dodaje do końca tablicy nowy element podany w nawiasie insert(); - dodaje element do dynamicznej tablicy w podanym miejscu begin(); - wskazuje pierwszy element dynamicznej tablicy end(); - wskazuje na koniec dynamicznej tablicy size(); - zwraca ilość elementów tablicy Przykładowe kontenery: tablica tablica asocjacyjna lista o o drzewo o lista jednokierunkowa lista dwukierunkowa drzewo binarne 1

Co to jest złożoność obliczeniowa? Szybkość nazywana jest przez programistów złożonością obliczeniową i oznaczana jest przez dużą literę O. Złożoność obliczeniowa jest to ilość podstawowych operacji jakie trzeba wykonać, aby został zrealizowany dany algorytm, posiadając określoną ilość danych wejściowych. Przykłady: O(K*1) - stała złożoność - algorytm wykonuje się w stałej ilości operacji, niezależnie od ilości danych. (algorytm: najszybszy) O(log(K*n)) - złożoność logarytmiczna - algorytm wykonuje logarytmiczną ilość operacji w stosunku do ilości danych wejściowych; n jest to ilość danych wejściowych. Podstawa logarytmu zazwyczaj wynosi 2, jednak czasami może być większa (np. w B-drzewach - nie będą one jednak tematem tego kursu). (algorytm: bardzo szybki) O(K*n) - złożoność liniowa - algorytm wykonuje wprost proporcjonalną ilość operacji do ilości danych wejściowych. (algorytm: szybki) O(K*n^X) - złożoność wielomianowa - ilość operacji algorytmu jest wprost proporcjonalna do ilości danych wejściowych podniesionej do potęgi X, gdzie X jest stałą większą lub równą 2. (algorytm: wolny) O(K*X^n) - złożoność wykładnicza - ilość operacji algorytmu jest wprost proporcjonalna do stałej X większej lub równej 2, podniesionej do potęgi równej ilości danych wejściowych. (algorytm: bardzo wolny) K - jest to stała, która może mieć wartość zarówno 1 jak i 1000000. Zazwyczaj stała ta jest tak mała, że jest ona pomijalna przy podawaniu złożoności obliczeniowej algorytmów. Najczęściej wynosi ona 1 lub 2. złożoność obliczeniowa ilość operacji ilość danych wejściowych O(1) 1 100 000 O(log(n)) 17 100 000 O(n) 100 000 100 000 O(n^2) 10 000 000 000 100 000 O(2^n) 1 267 650 600 228 230 000 000 000 000 000 100 O(n^n) 88 817 841 970 012 500 000 000 000 000 000 00025 Procesor 3.0GHz/sek 3 000 000 000 Kontenery dostępne w STL-u W STL-u znajduje się kilka kontenerów do zarządzania danymi. Każdy z nich posiada inną złożoność obliczeniową dla poniższych operacji: odczyt danych; dodawanie danych; usuwanie danych; szukanie danych. Jak już wcześniej wspomniałem wyszukiwanie danych nie jest dostępne w niektórych kontenerach, jednak jest to zabieg celowy o czym przekonasz się później. Poniżej przedstawiam listę kontenerów jakie znajdziesz w STL-u: 2

lista (list) tablica (vector) tablica podwójnie kończona (deque) tablica bitowa (bitset) drzewo poszukiwań (set) wielokrotne drzewo poszukiwań (multiset) mapa poszukiwań (map) wielokrotna mapa poszukiwań (multimap) Oprócz kontenerów w STL-u istnieją również adaptery: stos (stack) kolejka (queue) kolejka priorytetowa (priority_queue) Opisy poszczególnych kontenerów (i adapterów), złożoności obliczeniowe operacji, przykłady itp. będą przedstawiane stopniowo w kolejnych rozdziałach. Co to są adaptery? Adapter jest jednym z wzorców projektowych. Zadaniem adaptera jest przekształcanie interfejsów różnych klas w taki, który jest oczekiwany przez użytkownika. Innymi słowy adapter daje nam metody, za pomocą których możemy np. pobierać i zapisywać dane w określony sposób, ale sposób organizacji danych w adapterze jest nieznany. Dzięki adapterowi możemy zmienić klasę zarządzającą danymi nie zmieniając działania całej aplikacji. Co to są iteratory? Iterator jest to obiekt pozwalający na sekwencyjny dostęp do wszystkich danych, znajdujących się w konkretnym kontenerze. Dzięki niemu możemy w łatwy sposób poruszać się po kontenerze, usuwać wybrane elementy lub napisać wyszukiwanie o złożoności obliczeniowej liniowej, jeśli dany kontener nie posiada wyszukiwania. Napisz program, który w dynamicznej tablicy będzie gromadził znaki wprowadzone z klawiatury. 3

Napisz program, który będzie gromadził w kontenerze wpisywane z klawiatury imiona. Napisz program, który będzie losować i umieszczać w kontenerze liczby z zakresu 1000 liczb. Po załadowaniu kontenera wyświetl informacyjnie jakiś podzbiór tych liczb. 4

Tak zmodyfikuj poprzedni program, by kontener zawierał posortowany zbiór liczb. To znaczy kolejne liczby nie wkładaj na koniec kontenera, ale od razu na ich właściwe miejsca wyznaczone ich wielkością. 5

Posortuj bezładnie zapełniony kontener Zadanie 1 (2p) Stwórz kontener do przechowywania liczb typu float i umieść w nim 10 losowych liczb. Zadanie 2 (4p) Korzystając z stworzonej na poprzednich ćwiczeniach klasie pojazd napisz kontener dla tej klasy. Stwórz dwa obiekty klasy pojazd i dodaj je do kontenera. Dodaj możliwość dodawania nowych pojazdów do kontenera, wypisywania rozmiaru kontenera i wypisywania informacji o danym pojeździe zawartym w kontenerze. Zadanie 3 (2p) Napisz program, który będzie losować i umieszczać w kontenerze zadaną ilość liczb, ale w sposób uporządkowany od najmniejszej do największej. Sporządź kontrolny wydruk zawartości kontenera. Obowiązkowy interfejs programu z użytkownikiem. 6