stl w praktyce. 50 sposobów efektywnego wykorzystania ebook.pdf

(8004 KB) Pobierz
707857599 UNPDF
IDZ DO
PRZYK£ADOW Y ROZDZIA£
SPIS TRECI
STL w praktyce. 50 sposobów
efektywnego wykorzystania
KATALOG KSI¥¯EK
Autor: Scott Meyers
T³umaczenie: Adam Majczak (rozdz. 1-5),
Wojciech Moch (rozdz. 6, 7, dod. A-C)
ISBN: 83-7361-373-0
Format: B5, stron: 282
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
TWÓJ KOSZYK
Standard Template Library to jedno z najpotê¿niejszych narzêdzi programistycznych
charakteryzuj¹ce siê z³o¿onoci¹ 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 objanienia, 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 zgodnoci 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³aciwego 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.
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
O NOWOCIACH
ZAMÓW CENNIK
CZYTELNIA
FRAGMENTY KSI¥¯EK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
707857599.001.png 707857599.002.png 707857599.003.png
Spis treci
Podzikowania...................................................................................9
Przedmowa......................................................................................13
Wprowadzenie .................................................................................17
Rozdział 1. Kontenery........................................................................................29
Zagadnienie 1. Uwanie dobierajmy kontenery................................................................30
Zagadnienie 2. Nie dajmy si zwie iluzji o istnieniu kodów niezalenych
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 operuj1ce na całych zakresach (podzbiorach),
bo s1 bardziej efektywne ni ich odpowiedniki operuj1ce pojedynczymi elementami...45
Zagadnienie 6. B1d4my wyczuleni i przygotowani na najbardziej
kłopotliw1 interpretacj kompilatora C++ ...................................................................56
Zagadnienie 7. Gdy stosujemy kontenery zawieraj1ce wska4niki zainicjowane
za pomoc1 operatora new, pamitajmy o zwolnieniu dynamicznej pamici
operatorem delete, zanim zawieraj1cy je obiekt-kontener sam zostanie usunity.......59
Zagadnienie 8. Nigdy nie twórzmy kontenerów zawieraj1cych wska4niki
kategorii auto_ptr .........................................................................................................64
Zagadnienie 9. Uwanie dobierajmy opcje do operacji kasowania ..................................67
Zagadnienie 10. Uwaajmy na konwencje dynamicznej alokacji pamici
i stosowne ograniczenia ...............................................................................................73
Zagadnienie 11. Zrozumienie uprawnionych zastosowa= alokatorów pamici
tworzonych przez uytkownika....................................................................................80
Zagadnienie 12. Miejmy umiarkowane i realistyczne oczekiwania odnonie
poziomu bezpiecze=stwa wielu w1tków obsługiwanych przez kontenery STL ..........84
6
Spis treci
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 unikn1 zbdnego przemieszczania
elementów w pamici...................................................................................................93
Zagadnienie 15. B1d4my ostroni 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” pozwalaj1ca
na obcicie nadmiarowej pojemnoci ........................................................................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 pomidzy
relacjami równoci a równowanoci ........................................................................112
Zagadnienie 20. Okrelajmy typy porównawcze dla kontenerów asocjacyjnych
zawieraj1cych wska4niki............................................................................................117
Zagadnienie 21. Funkcje porównuj1ce powinny dla dwóch dokładnie równych
wartoci zawsze zwraca warto false......................................................................122
Zagadnienie 22. Unikajmy bezporedniego modyfikowania klucza w kontenerach
typu set i multiset .......................................................................................................126
Zagadnienie 23. Rozwamy zast1pienie kontenerów asocjacyjnych
posortowanymi wektorami.........................................................................................133
Zagadnienie 24. Gdy efektywno działania jest szczególnie istotna, naley bardzo
uwanie dokonywa wyboru pomidzy 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() nale1c1 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 s1 wystarczaj1co obszerne .......166
Zagadnienie 31. Pamitajmy o dostpnych i stosowanych opcjach sortowania.............171
Zagadnienie 32. Stosujmy metod erase() w lad za algorytmami kategorii remove(),
jeli naprawd chcemy co skutecznie usun1 z kontenera .......................................177
Zagadnienie 33. Przezornie i ostronie stosujmy algorytmy kategorii remove()
wobec kontenerów zawieraj1cych wska4niki ............................................................182
Zagadnienie 34. Zwracajmy uwag, które z algorytmów oczekuj1
posortowanych zakresów ...........................................................................................186
Spis treci
7
Zagadnienie 35. Implementujmy zwykłe porównywanie ła=cuchów znaków bez
rozróniania wielkoci liter za pomoc1 mismatch() lub lexicographical_compare()....190
Zagadnienie 36. Zrozum prawidłow1 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. Uywaj algorytmów, zamiast pisa ptle.............................................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ł1czaj właciwe pliki nagłówkowe......................................248
Zagadnienie 49. Naucz si odczytywa komunikaty kompilatora zwi1zane
z bibliotek1 STL.........................................................................................................249
Zagadnienie 50. Poznaj strony WWW zwi1zane z bibliotek1 STL................................256
Dodatek A Bibliografia....................................................................................263
Ksi1ki napisane przeze mnie .........................................................................................263
Ksi1ki, które nie ja napisałem (cho chciałbym)...........................................................264
Dodatek B Porównywanie ci.gów znaków bez uwzgldniania wielko6ci liter .....267
Jak wykonywa porównywanie ci1gów znaków bez uwzgldniania wielkoci 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
Rozwi1zania dla kompilatorów MSVC w wersji 4 do 5.................................................279
Dodatkowe rozwi1zanie dla kompilatora MSVC w wersji 6..........................................280
Skorowidz......................................................................................283
Rozdział 6.
Funktory, klasy-funktory,
funkcje i inne
Czy nam si to podoba czy nie, funkcje i podobne do funkcji obiekty — funktory — s
czci STL. Kontenery asocjacyjne stosuj je do porzdkowania swoich elemen-
tów, w algorytmach typu wykorzystywane s do kontroli zachowa& tych al-
gorytmów. Algorytmy takie jak i s bez funktorów zupełnie
nieprzydatne, natomiast adaptory typu i słu) do tworzenia funktorów.
Wszdzie gdzie spojrze+, mo)na w STL znale,+ funktory i klasy-funktory. Znajd si
one równie) w Twoich kodach ,ródłowych. Efektywne zastosowanie STL bez umiejt-
noci tworzenia dobrych funktorów jest po prostu niemo)liwe. Z tego powodu wiksza
cz+ tego rozdziału bdzie opisywa+ sposoby takiego tworzenia funktorów, aby zacho-
wywały si one zgodnie z wymaganiami STL. Jednak jedno z zagadnie& opisuje zupeł-
nie inny temat. Ten podrozdział spodoba si osobom, które zastanawiały si, dlaczego
konieczne jest zamiecanie kodu programu wywołaniami funkcji ,
i . Oczywicie mo)na zacz+ lektur od tego włanie podrozdziału, „Za-
gadnienie 41.”, ale prosz nie poprzestawa+ na nim. Po poznaniu przedstawionych tam
funkcji konieczne bdzie zapoznanie si z informacjami z pozostałych, dziki czemu
Twoje funkcje bd prawidłowo działały zarówno z tymi funkcjami, jak i z reszt STL.
Zagadnienie 38.
Projektowanie klas-funktorów
do przekazywania przez warto
Zagadnienie 38. Projektowanie klas-funktorów do przekazywania przez warto
Jzyki C i C++ nie pozwalaj na przekazywanie funkcji w parametrach innych funkcji.
Konieczne jest przekazywanie wska,ników na te funkcje. Na przykład poni)ej znajduje
si deklaracja funkcji z biblioteki standardowej.
Zgłoś jeśli naruszono regulamin