To tylko jedna z 33 stron tej notatki. Zaloguj się aby zobaczyć ten dokument.
Zobacz
całą notatkę
Standardowa biblioteka szablonów (STL) Wykład 11 11/01/10 2 Pliki nagłówkowe języka C Wszystkie funkcje języka C zostały z przestrzeni globalnej przeniesione do przestrzenie nazw std //standard #include using namespace std; int main() { printf ("Hello World!"); return 0; } //niepraktykowane #include int main() { printf ("Hello World!"); return 0; } Stary sposób dołączania też jest możliwy, ale niepraktykowany ANSI-C++ ANSI-C 11/01/10 3 Standardowa biblioteka szablonów (STL) Rdzeniem standardowej biblioteki C++ jest tzw. standardowa biblioteka szablonów STL umożliwia zarządzanie kolekcjami danych przy użyciu wydajnych algorytmów, bez konieczności dogłębnego poznawania ich sposobu działania STL oferuje grupę klas kontenerowych zaspokajających rozmaite potrzeby wraz z algorytmami, które na nich operują STL wzbogaca język C++ o nowy poziom abstrakcji Możemy zapomnieć o programowaniu dynamicznych tablic czy drzew oraz algorytmów do ich przeszukiwania Ze względu na swoją elastyczność STL wymaga objaśnienia Trzeba się zapoznać z jego składnikami Oraz nauczyć się wydajnego korzystania z dostarczonych algorytmów 11/01/10 4 Składniki STL Kontenery – służą do zarządzania kolekcjami obiektów określonego typu Poszczególne kontenery mają różne zalety oraz wady i odzwierciedlają zróżnicowane potrzeby wobec kolekcji w tworzonych programach Iteratory – służą do poruszania się po kolekcjach Oferują one interfejs wspólny dla każdego dowolnego typu kontenerowego Interfejs iteratorów jest bardzo podobny operacji na wskaźnikach (możemy np. używać ++, *, -) Algorytmy – służą do przetwarzania elementów kolekcji Mogą one wyszukiwać, sortować, modyfikować lub po prostu wykorzystywać elementy Algorytmy korzystają z iteratorów przez co mogą być używane do dowolnego typu kolekcji 11/01/10 5 Koncepcja STL Koncepcja biblioteki STL oparta jest na odseparowaniu danych od operacji Dane zarządzenie są przez klasy kontenerowe Operacje natomiast definiowane są przez konfigurowalne
(…)
…
operator* - zwraca element z aktualnej pozycji
operator++ - przesuwa iterator na pozycję następną
operator== i != zwracają wartość logiczną czy iteratory
reprezentują tą samą (inną) pozycję
operator= - przypisanie
Każdy kontener definiuje co najmniej dwa typy iteratorów
11/01/10
kontener::iterator – przeznaczony do nawigowania w
trybie odczytu i zapisu
kontener::const_iterator – przeznaczony…
…, tak żeby wszystkie elementy
się zmieściły w niej
W odniesieniu do rozmiaru wektory udostępniają funkcję
capacity(), która zwraca liczbę możliwych do pomieszczenie
elementów bez reorganizacji pamięci
W celu wcześniejszego zaalokowania pamięci możemy
Realokacja unieważnia wszystkie referencje, wskaźniki i iteratory
dotyczące elementów wektora
Realokacja zajmuje czas
Podać wielkość wektora w konstruktorze
std::vector<T> Vec(100); //wywoływane konstruktory
domyślne
Zarezerwować odpowiednią ilość pamięci
Vec.reserve(100); //zalecana wersja
Pojemność wektora nigdy nie maleje nawet jeśli usuwamy elementy
11/01/10
21
Rozmiar, a pojemność…
Wektory zajmują ciągły obszar pamięci
Pojemność wektorów nigdy nie maleje
Istnieje pośredni sposób na zmniejszenie
pojemności wektora
Gwarantuje…
…); - usuwa elementy o wartości val
c.remove_if(op); - usuwa elementy takie, dla
których wywołanie op(elem) == true; (op predykat)
Przykład cpp_11.6
11/01/10
31
Funkcje splatające
Listy udostępniają także wydajne metody służące do zmiany
kolejności oraz powiązań między poszczególnymi elementami
W obrębie jednej listy
Pomiędzy dwoma listami tego samego typu
Metody
11/01/10
c1.splice(pos, c2…
... zobacz całą notatkę
Komentarze użytkowników (0)