Josuttis N. - C++. Biblioteka standardowa. Podręcznik programisty. Wydanie II.pdf

(7303 KB) Pobierz
Spis treści
Przedmowa do drugiego wydania
Podziękowania do drugiego wydania
Przedmowa do pierwszego wydania
Podziękowania do pierwszego wydania
1. O książce
1.1. Dlaczego powstała ta książka?
1.2. Co należy wiedzieć przed przystąpieniem do lektury tej książki?
1.3. Styl i struktura książki
1.4. Jak czytać tę książkę?
1.5. Stan obecny
1.6. Przykładowy kod i dodatkowe informacje
17
19
21
23
25
25
26
26
30
30
30
2. Wprowadzenie do języka C++ i biblioteki standardowej
2.1. Historia standardów C++
2.1.1. Typowe pytania o standard C++11
2.1.2. Zgodność pomiędzy C++11 i C++98
2.2. Złożoność algorytmów a notacja O
31
31
32
34
34
3. Nowe elementy języka
3.1. Nowe elementy języka C++11
3.1.1. Istotne pomniejsze porządki składniowe
3.1.2. Automatyczna dedukcja typu ze słowem auto
3.1.3. Jednolita składnia inicjalizacji i listy inicjalizacyjne
3.1.4. Pętle zakresowe
3.1.5. Semantyka przeniesienia i referencje do r-wartości
3.1.6. Nowe literały napisowe
3.1.7. Słowo noexcept
3.1.8. Słowo constexpr
37
37
37
38
39
41
43
48
49
51
6
3.1.9. Nowe elementy szablonów
3.1.10. Lambdy
3.1.11. Słowo decltype
3.1.12. Nowa składnia deklaracji funkcji
3.1.13. Klasy wyliczeniowe
3.1.14. Nowe typy podstawowe
3.2. Starsze „nowości” języka C++
3.2.1. Jawna inicjalizacja typów podstawowych
3.2.2. Definicja funkcji main()
SPIS TREŚCI
51
53
57
57
58
58
59
63
63
4. Pojęcia ogólne
4.1. Przestrzeń nazw std
4.2. Pliki nagłówkowe
4.3. Obsługa błędów i wyjątków
4.3.1. Standardowe klasy wyjątków
4.3.2. Składowe klas wyjątków
4.3.3. Przekazywanie wyjątków z użyciem klasy exception_ptr
4.3.4. Zgłaszanie wyjątków standardowych
4.3.5. Tworzenie klas pochodnych standardowych klas wyjątków
4.4. Obiekty wywoływalne
4.5. Wielowątkowość i współbieżność
4.6. Alokatory
65
65
67
68
68
72
80
80
81
82
83
85
5. Narzędzia
5.1. Pary i krotki
5.1.1. Pary
5.1.2. Krotki
5.1.3. Wejście-wyjście dla krotek
5.1.4. Konwersje pomiędzy krotkami a parami
5.2. Inteligentne wskaźniki
5.2.1. Klasa shared_ptr
5.2.2. Klasa weak_ptr
5.2.3. Niepoprawne stosowanie wskaźników współdzielonych
5.2.4. Klasy wskaźników słabych i współdzielonych w szczegółach
5.2.5. Klasa unique_ptr
5.2.6. Klasa unique_ptr w szczegółach
5.2.7. Klasa auto_ptr
5.2.8. Podsumowanie inteligentnych wskaźników
5.3. Ograniczenia liczbowe
5.4. Cechy typowe i narzędzia pracy z typami
5.4.1. Przeznaczenie cech typowych
5.4.2. Cechy typowe w szczegółach
5.4.3. Ujęcia referencyjne
5.4.4. Ujęcia typów funkcyjnych
5.5. Funkcje pomocnicze
5.5.1. Obliczanie wartości minimalnej oraz maksymalnej
5.5.2. Zamiana dwóch wartości
5.5.3. Dodatkowe operatory porównania
5.6. Statyczna arytmetyka liczb wymiernych — klasa ratio<>
87
88
88
96
101
103
103
104
112
118
120
127
140
143
144
145
152
152
156
163
164
165
165
167
169
170
C++ BIBLIOTEKA STANDARDOWA PODRĘCZNIK PROGRAMISTY
7
174
174
176
180
189
191
192
193
193
195
5.7. Zegary i czasomierze
5.7.1. Przegląd biblioteki chrono
5.7.2. Okresy
5.7.3. Zegary i punkty w czasie
5.7.4. Funkcje daty i czasu języka C i standardu POSIX
5.7.5. Czasowe wstrzymywanie wykonania
5.8. Pliki nagłówkowe <cstddef>, <cstdlib> oraz <cstring>
5.8.1. Definicje w pliku <cstddef>
5.8.2. Definicje w pliku <cstdlib>
5.8.3. Definicje w pliku <cstring>
6. Standardowa biblioteka szablonów (STL)
6.1. Składniki biblioteki STL
6.2. Kontenery
6.2.1. Kontenery sekwencyjne
6.2.2. Kontenery asocjacyjne
6.2.3. Kontenery nieporządkujące
6.2.4. Tablice asocjacyjne
6.2.5. Inne kontenery
6.2.6. Adaptatory kontenerów
6.3. Iteratory
6.3.1. Inne przykłady użycia kontenerów asocjacyjnych i nieporządkujących
6.3.2. Kategorie iteratorów
6.4. Algorytmy
6.4.1. Zakresy
6.4.2. Obsługa wielu zakresów
6.5. Adaptatory iteratorów
6.5.1. Iteratory wstawiające
6.5.2. Iteratory strumieni
6.5.3. Iteratory odwrotne
6.5.4. Iteratory przenoszące
6.6. Własne uogólnione operacje na kontenerach
6.7. Algorytmy modyfikujące
6.7.1. Usuwanie elementów
6.7.2. Algorytmy modyfikujące kontenery asocjacyjne i nieporządkujące
6.7.3. Algorytmy a funkcje składowe
6.8. Funkcje jako argumenty algorytmów
6.8.1. Przykłady użycia funkcji jako argumentów algorytmów
6.8.2. Predykaty
6.9. Stosowanie lambd
6.10. Obiekty funkcyjne
6.10.1. Definicja obiektów funkcyjnych
6.10.2. Predefiniowane obiekty funkcyjne
6.10.3. Wiązanie wywołania
6.10.4. Obiekty funkcyjne i wiązanie kontra lambdy
6.11. Elementy kontenerów
6.11.1. Wymagania wobec elementów kontenerów
6.11.2. Semantyka wartości a semantyka referencji
197
198
199
201
210
214
219
221
222
223
228
233
234
238
242
245
245
247
249
251
251
252
253
256
258
259
259
261
263
267
267
273
274
277
278
278
279
8
6.12. Obsługa błędów i wyjątków wewnątrz biblioteki STL
6.12.1. Obsługa błędów
6.12.2. Obsługa wyjątków
6.13. Rozbudowa biblioteki STL
6.13.1. Integrowanie dodatkowych typów
6.13.2. Dziedziczenie po typach STL
SPIS TREŚCI
280
280
282
286
286
287
7. Kontenery STL
7.1. Wspólne cechy i operacje kontenerów
7.1.1. Wspólne cechy kontenerów
7.1.2. Wspólne operacje kontenerów
7.1.3. Typy kontenerów
7.2. Tablice
7.2.1. Możliwości tablic
7.2.2. Operacje dotyczące tablic
7.2.3. Używanie klas array<> jako zwykłych tablic
7.2.4. Obsługa wyjątków
7.2.5. Interfejs krotki
7.2.6. Przykłady użycia tablic
7.3. Wektory
7.3.1. Możliwości wektorów
7.3.2. Operacje na wektorach
7.3.3. Używanie wektorów jako zwykłych tablic
7.3.4. Obsługa wyjątków
7.3.5. Przykłady użycia wektorów
7.3.6. Klasa vector<bool>
7.4. Kolejki o dwóch końcach
7.4.1. Możliwości kolejek deque
7.4.2. Operacje na kolejkach deque
7.4.3. Obsługa wyjątków
7.4.4. Przykłady użycia kolejek deque
7.5. Listy
7.5.1. Możliwości list
7.5.2. Operacje na listach
7.5.3. Obsługa wyjątków
7.5.4. Przykłady użycia list
7.6. Listy jednokierunkowe
7.6.1. Możliwości list jednokierunkowych
7.6.2. Operacje na listach jednokierunkowych
7.6.3. Obsługa wyjątków
7.6.4. Przykłady użycia list jednokierunkowych
7.7. Zbiory i wielozbiory
7.7.1. Możliwości zbiorów i wielozbiorów
7.7.2. Operacje na zbiorach i wielozbiorach
7.7.3. Obsługa wyjątków
7.7.4. Przykłady użycia zbiorów i wielozbiorów
7.7.5. Przykład określania kryterium sortowania podczas wykonywania
7.8. Mapy oraz multimapy
7.8.1. Możliwości map oraz multimap
7.8.2. Operacje na mapach oraz multimapach
289
290
290
290
297
298
298
301
305
305
306
306
307
308
310
316
317
318
319
321
322
323
327
327
328
329
330
336
337
338
339
341
351
351
352
354
355
364
364
367
369
370
371
Zgłoś jeśli naruszono regulamin