STL w praktyce. 50 sposobów efektywnego wykorzystania - Helion

Tytuł oryginału: Effective STL 50 Specific Ways to Improve Your Use of the Standard Template Library
Tłumaczenie: Adam Majczak (rozdz. 1-5), Wojciech Moch (rozdz. 6, 7, dod. A-C)
ISBN: 83-7361-373-0
stron: 296, Format: B5, okładka: miękka
Data wydania: 2004-03-17
Księgarnia: Helion
Cena książki: 34,90 zł
Standard Template Library to jedno z najpotężniejszych narzędzi programistycznych charakteryzujące się złożonością i wysokim stopniem komplikacji. W książce "STL w praktyce. 50 sposobów efektywnego wykorzystania" -- przeznaczonej dla zaawansowanych i średnio zaawansowanych programistów C++ -- znany ekspert Scott Meyers prezentuje najważniejsze techniki stosowania tego narzędzia. Poza listą zaleceń, jak postępować należy, a jak postępować się nie powinno, Meyers przedstawia wiele poważniejszych aspektów STL pozwalających zrozumieć, dlaczego pewne rozwiązania są poprawne, a innych należy unikać. Do każdej wskazówki dołączony jest kod źródłowy i dokładne objaśnienia, które powinny zainteresować zaawansowanych programistów.
Jeżeli Twoja wiedza ogranicza się do informacji dostępnych w dokumentacji STL, ta książka uzupełni ją o bezcenne wskazówki, które pozwolą Ci wykorzystać STL w praktyce.
Książka przedstawia:- Podstawowe informacje o bibliotece STL i jej zgodności z innymi standardami
- Wskazówki dotyczące poprawnego doboru i używania pojemników
- Opis pojemników typu vector i string
- Omówienie pojemników asocjatywnych
- Metody właściwego korzystania z iteratorów
- Algorytmy wchodzące w skład STL
- Funktory, klasy-funktory i funkcje
- Programowanie za pomocÄ… biblioteki STL
Książkę uzupełniają dodatki, w których znajdziesz między innymi obszerną bibliografię na temat STL oraz cenne wskazówki dla programistów używających kompilatorów firmy Microsoft.
"STL w praktyce. 50 sposobów efektywnego wykorzystania" to nieocenione źródło wiedzy na temat jednego z najważniejszych aspektów programowania w C++. Jeżeli chcesz w praktyce wykorzystać STL, nie obędziesz się bez informacji zawartych w tej książce.
Spis treści
STL w praktyce. 50 sposobów efektywnego wykorzystania -- spis treści
Podziękowania (9)
Przedmowa (13)
Wprowadzenie (17)
Rozdział 1. Kontenery (29)
- Zagadnienie 1. Uważnie dobierajmy kontenery (30)
- Zagadnienie 2. Nie dajmy się zwieść iluzji o istnieniu kodów niezależnych do zastosowanego kontenera (35)
- Zagadnienie 3. Kopiowanie obiektów w kontenerach powinno być "tanie", łatwe i poprawne (40)
- Zagadnienie 4. Stosujmy metodę empty(), zamiast przyrównywać rozmiar size() do zera (43)
- Zagadnienie 5. Preferujmy metody operujące na całych zakresach (podzbiorach), bo są bardziej efektywne niż ich odpowiedniki operujące pojedynczymi elementami (45)
- Zagadnienie 6. Bądźmy wyczuleni i przygotowani na najbardziej kłopotliwą interpretację kompilatora C++ (56)
- Zagadnienie 7. Gdy stosujemy kontenery zawierające wskaźniki zainicjowane za pomocą operatora new, pamiętajmy o zwolnieniu dynamicznej pamięci operatorem delete, zanim zawierający je obiekt-kontener sam zostanie usunięty (59)
- Zagadnienie 8. Nigdy nie twórzmy kontenerów zawierających wskaźniki kategorii auto_ptr (64)
- Zagadnienie 9. Uważnie dobierajmy opcje do operacji kasowania (67)
- Zagadnienie 10. Uważajmy na konwencje dynamicznej alokacji pamięci i stosowne ograniczenia (73)
- Zagadnienie 11. Zrozumienie uprawnionych zastosowań alokatorów pamięci tworzonych przez użytkownika (80)
- Zagadnienie 12. Miejmy umiarkowane i realistyczne oczekiwania odnośnie poziomu bezpieczeństwa wielu wątków obsługiwanych przez kontenery STL (84)
Rozdział 2. Kontenery typu vector oraz string (89)
- Zagadnienie 13. Lepiej stosować kontenery vector oraz string niż dynamicznie przydzielać pamięć tablicom (90)
- Zagadnienie 14. Stosujmy metodę reserve, by uniknąć zbędnego przemieszczania elementów w pamięci (93)
- Zagadnienie 15. Bądźmy ostrożni i wyczuleni na zróżnicowanie implementacji kontenerów typu string (96)
- Zagadnienie 16. Powinieneś wiedzieć, jak przesyłać dane z kontenerów vector i string do klasycznego interfejsu zgodnego z C (102)
- Zagadnienie 17. Sztuczka programistyczna "swap trick" pozwalająca na obcięcie nadmiarowej pojemności (106)
- Zagadnienie 18. Unikajmy stosowania wektora typu vector<bool> (108)
Rozdział 3. Kontenery asocjacyjne (111)
- Zagadnienie 19. Ten sam czy taki sam - zrozumienie różnicy pomiędzy relacjami równości a równoważności (112)
- Zagadnienie 20. Określajmy typy porównawcze dla kontenerów asocjacyjnych zawierających wskaźniki (117)
- Zagadnienie 21. Funkcje porównujące powinny dla dwóch dokładnie równych wartości zawsze zwracać wartość false (122)
- Zagadnienie 22. Unikajmy bezpośredniego modyfikowania klucza w kontenerach typu set i multiset (126)
- Zagadnienie 23. Rozważmy zastąpienie kontenerów asocjacyjnych posortowanymi wektorami (133)
- Zagadnienie 24. Gdy efektywność działania jest szczególnie istotna, należy bardzo uważnie dokonywać wyboru pomiędzy map::operator[]() a map::insert() (140)
- Zagadnienie 25. Zapoznaj siÄ™ z niestandardowymi kontenerami mieszanymi (146)
Rozdział 4. Iteratory (151)
- Zagadnienie 26. Lepiej wybrać iterator niż const_iterator, reverse_iterator czy const_reverse_iterator (151)
- Zagadnienie 27. Stosujmy funkcje distance() i advance(), by przekształcić typ const_iterator na typ iterator (155)
- Zagadnienie 28. Jak stosować metodę base() należącą do klasy reverse_iterator w celu uzyskania typu iterator? (159)
- Zagadnienie 29. Rozważ zastosowanie iteratorów typu istreambuf_iterator do wczytywania danych znak po znaku (163)
Rozdział 5. Algorytmy (165)
- Zagadnienie 30. Upewnijmy się, że docelowe zakresy są wystarczająco obszerne (166)
- Zagadnienie 31. Pamiętajmy o dostępnych i stosowanych opcjach sortowania (171)
- Zagadnienie 32. Stosujmy metodę erase() w ślad za algorytmami kategorii remove(), jeśli naprawdę chcemy coś skutecznie usunąć z kontenera (177)
- Zagadnienie 33. Przezornie i ostrożnie stosujmy algorytmy kategorii remove() wobec kontenerów zawierających wskaźniki (182)
- Zagadnienie 34. Zwracajmy uwagę, które z algorytmów oczekują posortowanych zakresów (186)
- Zagadnienie 35. Implementujmy zwykłe porównywanie łańcuchów znaków bez rozróżniania wielkości liter za pomocą mismatch() lub lexicographical_compare() (190)
- Zagadnienie 36. Zrozum prawidłową implementację algorytmu copy_if() (196)
- Zagadnienie 37. Stosujmy accumulate() lub for_each() do operacji grupowych na zakresach (198)
Rozdział 6. Funktory, klasy-funktory, funkcje i inne (205)
- Zagadnienie 38. Projektowanie klas-funktorów do przekazywania przez wartość (205)
- Zagadnienie 39. Predykaty powinny być funkcjami czystymi (208)
- Zagadnienie 40. Klasy-funktory powinny być adaptowalne (212)
- Zagadnienie 41. Po co stosować funkcje ptr_fun, mem_fun i mem_fun_ref? (215)
- Zagadnienie 42. Upewnij się, że less<t>() oznacza operator<() (219)
Rozdział 7. Programowanie za pomocą biblioteki STL (223)
- Zagadnienie 43. Używaj algorytmów, zamiast pisać pętle (223)
- Zagadnienie 44. Zamiast algorytmów stosujmy metody o takich samych nazwach (231)
- Zagadnienie 45. Rozróżnianie funkcji count(), find(), binary_search(), lower_bound(), upper_bound() i equal_range() (233)
- Zagadnienie 46. Jako parametry algorytmów stosuj funktory, a nie funkcje (241)
- Zagadnienie 47. Unikaj tworzenia kodu "tylko do zapisu" (245)
- Zagadnienie 48. Zawsze dołączaj właściwe pliki nagłówkowe (248)
- Zagadnienie 49. Naucz się odczytywać komunikaty kompilatora związane z biblioteką STL (249)
- Zagadnienie 50. Poznaj strony WWW zwiÄ…zane z bibliotekÄ… STL (256)
Dodatek A Bibliografia (263)
- Książki napisane przeze mnie (263)
- Książki, które nie ja napisałem (choć chciałbym) (264)
Dodatek B Porównywanie ciągów znaków bez uwzględniania wielkości liter (267)
- Jak wykonywać porównywanie ciągów znaków bez uwzględniania wielkości liter - artykuł autorstwa Matta Austerna (267)
Dodatek C Uwagi na temat platformy STL Microsoftu (277)
- Szablony metod w STL (277)
- MSVC wersje 4 do 6 (278)
- Rozwiązania dla kompilatorów MSVC w wersji 4 do 5 (279)
- Dodatkowe rozwiÄ…zanie dla kompilatora MSVC w wersji 6. (280)
Skorowidz (283)