C++. Dla każdego. Wydanie VII - ebook
C++. Dla każdego. Wydanie VII - ebook
Programowanie w Twoim zasięgu!
Pomimo swojego wieku C++ wciąż zajmuje wysoką lokatę na liście najpopularniejszych języków programowania. Przez lata dzięki wydajności oraz dostępności zdobył sobie licznych wielbicieli i wciąż jest niezastąpiony w wielu zadaniach, choć w branży przewagę nad nim mają język Java i platforma .NET. Jeżeli jednak oczekujesz najwyższej wydajności i przewidywalnego czasu wykonania zadania, język C++ może okazać się jedynym słusznym wyborem.
Z tą książką opanujesz język C++ bez trudu, poświęcając na to tylko godzinę dziennie! W trakcie lektury zgłębisz jego tajniki, poznasz zalety oraz wady. Każda kolejna godzina to coraz bardziej zaawansowana, a przy tym ciekawsza dawka wiedzy. Opanowanie materiału zawartego w podręczniku pozwoli Ci na pisanie programów o różnym stopniu złożoności oraz swobodne poruszanie się w świecie języka C++. W trakcie lektury opanujesz składnię i elementy języka - tablice, instrukcje warunkowe, pętle czy stałe nie będą miały przed Tobą żadnych tajemnic. W kolejnych rozdziałach dowiesz się, jak wykorzystać wskaźniki i dyrektywy kompilatora. Ponadto zaznajomisz się z zasadami programowania obiektowego oraz poznasz nowości zawarte w wersji 11. Książka ta jest doskonałym źródłem wiedzy dla każdego adepta języka C++!
Dzięki tej książce:
- poznasz składnię języka C++
- opanujesz nowości wersji 11 języka C++
- poznasz zasady programowania obiektowego
- napiszesz program o dowolnym stopniu skomplikowania
Poznaj i wykorzystaj potencjał języka C++!
Spis treści
O autorze (21)
Wstęp (23)
CZĘŚĆ I. PODSTAWY (27)
Lekcja 1. Zaczynamy (29)
- Krótka historia języka C++ (30)
- Powiązanie z językiem C (30)
- Zalety języka C++ (30)
- Ewolucja standardu C++ (31)
- Kto używa programów utworzonych w C++? (31)
- Tworzenie aplikacji C++ (32)
- Kroki prowadzące do wygenerowania pliku wykonywalnego (32)
- Analiza błędów i ich usuwanie (33)
- Zintegrowane środowiska programistyczne (33)
- Tworzenie pierwszej aplikacji w C++ (34)
- Kompilacja i uruchomienie pierwszej aplikacji w C++ (35)
- Błędy kompilacji (37)
- Co nowego w C++11? (37)
- Podsumowanie (38)
- Pytania i odpowiedzi (38)
- Warsztaty (39)
Lekcja 2. Anatomia programu C++ (41)
- Komponenty programu (42)
- Dyrektywa preprocesora #include (42)
- Część główna programu - funkcja main() (43)
- Wartość zwrotna (44)
- Koncepcja przestrzeni nazw (45)
- Komentarze w kodzie C++ (47)
- Funkcje w C++ (48)
- Podstawowe wejście za pomocą std::cin i wyjście za pomocą std::cout (51)
- Podsumowanie (53)
- Pytania i odpowiedzi (53)
- Warsztaty (54)
Lekcja 3. Zmienne i stałe (55)
- Czym jest zmienna? (56)
- Ogólne omówienie pamięci i adresowania (56)
- Deklarowanie zmiennych uzyskujących dostęp i używających pamięci (56)
- Deklarowanie i inicjalizowanie wielu zmiennych tego samego typu (59)
- Zrozumienie zakresu zmiennej (59)
- Zmienne globalne (61)
- Typy zmiennych najczęściej używane w C++ (63)
- Użycie typu bool do przechowywania wartości boolowskich (64)
- Użycie typu char do przechowywania znaków (65)
- Koncepcja liczb ze znakiem i bez znaku (65)
- Liczby całkowite ze znakiem, czyli typy short, int, long i long long (66)
- Liczby całkowite bez znaku, czyli typy unsigned short, unsigned int, unsigned long i unsigned long long (67)
- Typy zmiennoprzecinkowe float i double (67)
- Określanie wielkości zmiennej za pomocą sizeof (68)
- Użycie typedef do zastąpienia typu zmiennej (72)
- Czym jest stała? (72)
- Dosłowne stałe (73)
- Deklarowanie zmiennych jako stałych przy użyciu const (74)
- Deklarowanie stałych za pomocą constexpr (75)
- Stałe typu wyliczeniowego (76)
- Definiowanie stałych za pomocą dyrektywy #define (78)
- Nazwy zmiennych i stałych (79)
- Słowa kluczowe, których nie można używać jako nazw zmiennych lub stałych (80)
- Podsumowanie (80)
- Pytania i odpowiedzi (81)
- Warsztaty (84)
Lekcja 4. Tablice i ciągi tekstowe (85)
- Czym jest tablica? (86)
- Kiedy trzeba użyć tablicy? (86)
- Deklarowanie i inicjalizacja tablic statycznych (87)
- Jak w tablicy przechowywane są dane? (88)
- Uzyskanie dostępu do danych przechowywanych w tablicy (90)
- Modyfikacja danych przechowywanych w tablicy (91)
- Tablice wielowymiarowe (94)
- Deklarowanie i inicjalizowanie tablic wielowymiarowych (95)
- Uzyskanie dostępu do elementów tablicy wielowymiarowej (95)
- Tablice dynamiczne (97)
- Ciągi tekstowe w stylu C (99)
- Ciągi tekstowe C++ - użycie klasy std::string (102)
- Podsumowanie (104)
- Pytania i odpowiedzi (105)
- Warsztaty (106)
Lekcja 5. Wyrażenia, instrukcje i operatory (109)
- Polecenia (110)
- Polecenia złożone, czyli bloki (111)
- Użycie operatorów (111)
- Operator przypisania (=) (111)
- Zrozumienie l-wartości i r-wartości (112)
- Operatory dodawania (+), odejmowania (-), mnożenia (*), dzielenia (/) i reszty z dzielenia (%) (112)
- Operatory inkrementacji (++) i dekrementacji (--) (113)
- Operator postfiksowy czy prefiksowy? (114)
- Operatory równości (==) i nierówności (!=) (117)
- Operatory relacji (118)
- Operatory logiczne NOT, AND, OR i XOR (120)
- Użycie w C++ operatorów logicznych NOT (!), AND (&&) i OR (||) (122)
- Bitowe operatory NOT (~), AND (&), OR (|) i XOR (^) (126)
- Operatory bitowego przesunięcia w prawo (>>) oraz w lewo (<<) (128)
- Złożone operatory przypisania (130)
- Użycie operatora sizeof w celu określenia ilości pamięci zajmowanej przez zmienną (132)
- Pierwszeństwo operatorów (133)
- Podsumowanie (136)
- Pytania i odpowiedzi (136)
- Warsztaty (137)
Lekcja 6. Sterowanie przebiegiem działania programu (139)
- Wykonanie warunkowe za pomocą if-else (140)
- Programowanie warunkowe z użyciem if-else (141)
- Warunkowe wykonanie wielu poleceń (143)
- Zagnieżdżone polecenia if (145)
- Przetwarzanie warunkowe za pomocą switch-case (149)
- Wykonywanie warunkowe przy użyciu operatora ?: (153)
- Wykonywanie kodu w pętlach (154)
- Bardzo prosta pętla wykonywana przy użyciu polecenia goto (155)
- Pętla while (157)
- Pętla do...while (159)
- Pętla for (161)
- Zmiana zachowania pętli za pomocą poleceń continue i break (165)
- Pętle działające w nieskończoność (165)
- Kontrolowanie pętli działającej w nieskończoność (166)
- Programowanie zagnieżdżonych pętli (169)
- Użycie zagnieżdżonych pętli do iteracji tablic wielowymiarowych (171)
- Użycie zagnieżdżonych pętli do obliczenia liczb ciągu Fibonacciego (173)
- Podsumowanie (174)
- Pytania i odpowiedzi (175)
- Warsztaty (176)
Lekcja 7. Funkcje (179)
- Kiedy należy stosować funkcje? (180)
- Czym jest prototyp funkcji? (181)
- Czym jest definicja funkcji? (182)
- Czym jest wywołanie funkcji i argumenty? (182)
- Tworzenie funkcji z wieloma parametrami (183)
- Tworzenie funkcji bez parametrów i bez wartości zwrotnej (185)
- Parametry funkcji wraz z wartościami domyślnymi (186)
- Rekurencja, czyli funkcja wywołująca samą siebie (188)
- Funkcje z wieloma poleceniami return (190)
- Użycie funkcji do pracy z różnymi formami danych (191)
- Przeciążanie funkcji (192)
- Przekazanie funkcji tablicy wartości (194)
- Przekazywanie argumentów przez referencję (195)
- Jak wywołania funkcji są obsługiwane przez mikroprocesor? (197)
- Funkcje typu inline (198)
- Funkcja lambda (200)
- Podsumowanie (202)
- Pytania i odpowiedzi (203)
- Warsztaty (204)
Lekcja 8. Wskaźniki i referencje (207)
- Czym jest wskaźnik? (208)
- Deklaracja wskaźnika (208)
- Określenie adresu zmiennej przy użyciu operatora referencji (&) (209)
- Użycie wskaźników do przechowywania adresów (210)
- Uzyskanie dostępu do danych przy użyciu operatora dereferencji (*) (213)
- Ile pamięci zabiera wskaźnik? (216)
- Dynamiczna alokacja pamięci (218)
- Użycie operatorów new i delete w celu dynamicznej alokacji i zwalniania pamięci (218)
- Efektywne użycie operatorów inkrementacji (++) i dekrementacji (--) na wskaźnikach (222)
- Użycie słowa kluczowego const ze wskaźnikami (225)
- Przekazywanie wskaźników funkcjom (227)
- Podobieństwa pomiędzy tablicami i wskaźnikami (228)
- Najczęstsze błędy programistyczne popełniane podczas używania wskaźników (231)
- Wycieki pamięci (232)
- Kiedy wskaźnik nie prowadzi do poprawnego adresu w pamięci? (232)
- Zawieszone wskaźniki (nazywane również zabłąkanymi) (234)
- Najlepsze praktyki podczas pracy ze wskaźnikami (234)
- Sprawdzenie, czy żądanie alokacji zakończyło się powodzeniem (236)
- Czym jest referencja? (240)
- Dlaczego referencje są użyteczne? (241)
- Użycie słowa kluczowego const w referencjach (243)
- Przekazywanie funkcji argumentów przez referencję (243)
- Podsumowanie (245)
- Pytania i odpowiedzi (245)
- Warsztaty (247)
CZĘŚĆ II. PODSTAWY PROGRAMOWANIA ZORIENTOWANEGO OBIEKTOWO W C++ (249)
Lekcja 9. Klasy i obiekty (251)
- Koncepcja klas i obiektów (252)
- Deklarowanie klasy (252)
- Tworzenie obiektu klasy (253)
- Uzyskanie dostępu do elementów składowych przy użyciu operatora kropki (254)
- Uzyskanie dostępu do elementów składowych przy użyciu operatora wskaźnika (255)
- Słowa kluczowe public i private (257)
- Abstrakcja danych dzięki słowu kluczowemu private (259)
- Konstruktory (261)
- Deklarowanie i implementowanie konstruktora (261)
- Kiedy i jak używać konstruktorów? (262)
- Przeciążanie konstruktorów (264)
- Klasa bez konstruktora domyślnego (267)
- Parametry konstruktora wraz z wartościami domyślnymi (269)
- Konstruktory wraz z listami inicjalizacyjnymi (270)
- Destruktor (272)
- Deklarowanie i implementowanie destruktora (272)
- Kiedy i jak używać destruktorów? (273)
- Konstruktor kopiujący (276)
- Kopiowanie płytkie i związane z tym problemy (276)
- Wykonanie głębokiej kopii przy użyciu konstruktora kopiującego (279)
- Konstruktory przenoszące pomagają w poprawieniu wydajności (284)
- Różne sposoby użycia konstruktorów i destruktora (286)
- Klasa, której nie można kopiować (286)
- Klasa typu Singleton, która pozwala na istnienie tylko jednego egzemplarza (287)
- Klasy, których egzemplarze nie mogą być tworzone na stosie (290)
- Wskaźnik this (292)
- Operator sizeof() dla klasy (293)
- Jaka jest różnica pomiędzy strukturą i klasą? (297)
- Deklaracja "przyjaciela" klasy (297)
- Podsumowanie (300)
- Pytania i odpowiedzi (300)
- Warsztaty (302)
Lekcja 10. Dziedziczenie (305)
- Podstawy dziedziczenia (306)
- Dziedziczenie i pochodzenie (306)
- Stosowana w języku C++ składnia pochodzenia (308)
- Specyfikator dostępu protected (311)
- Inicjalizacja klasy bazowej - przekazywanie parametrów klasie bazowej (314)
- Klasy potomne nadpisują metody klasy bazowej (316)
- Wywoływanie nadpisanych metod klasy bazowej (319)
- Wywoływanie metod klasy bazowej z poziomu klas potomnych (319)
- Klasy potomne ukrywają metody klasy bazowej (321)
- Kolejność użycia konstruktorów (324)
- Kolejność użycia destruktorów (324)
- Dziedziczenie prywatne (327)
- Dziedziczenie chronione (330)
- Problem segmentowania (333)
- Dziedziczenie wielokrotne (334)
- Podsumowanie (337)
- Pytania i odpowiedzi (338)
- Warsztaty (339)
Lekcja 11. Polimorfizm (341)
- Podstawy polimorfizmu (342)
- Potrzeba stosowania polimorfizmu (342)
- Zachowanie polimorficzne implementowane przy użyciu funkcji wirtualnych (344)
- Konieczność stosowania wirtualnych destruktorów (346)
- Jak działa funkcja wirtualna? Zrozumienie tabeli funkcji wirtualnych (351)
- Abstrakcyjne klasy bazowe i funkcje czysto wirtualne (355)
- Użycie dziedziczenia prywatnego do rozwiązania problemu niejednoznaczności semantycznej (358)
- Wirtualne konstruktory kopiujące? (363)
- Podsumowanie (367)
- Pytania i odpowiedzi (367)
- Warsztaty (368)
Lekcja 12. Typy operatorów i ich przeciążanie (371)
- Czym są operatory w C++? (372)
- Operatory jednoargumentowe (373)
- Typy operatorów jednoargumentowych (373)
- Programowanie jednoargumentowego operatora inkrementacji i dekrementacji (374)
- Programowanie operatorów konwersji (378)
- Programowanie operatora dereferencji (*) i operatora wyboru elementu składowego (->) (380)
- Operatory dwuargumentowe (384)
- Typy operatorów dwuargumentowych (385)
- Programowanie operatorów dodawania (a+b) i odejmowania (a-b) (386)
- Implementowanie operatorów dodawania/przypisania (+=) i odejmowania/przypisania (-=) (389)
- Przeciążanie operatorów równości (==) i nierówności (!=) (391)
- Przeciążanie operatorów <, >, <= i >= (394)
- Przeciążanie kopiującego operatora przypisania (=) (397)
- Operatory indeksowania (400)
- Funkcja operator() (404)
- Użycie konstruktora przenoszącego i przenoszącego operatora przypisania w wysokowydajnym programowaniu (406)
- Operatory, których nie można ponownie zdefiniować (413)
- Podsumowanie (414)
- Pytania i odpowiedzi (414)
- Warsztaty (415)
Lekcja 13. Operatory rzutowania (417)
- Kiedy trzeba skorzystać z rzutowania? (418)
- Dlaczego rzutowanie w stylu C nie jest popularne wśród niektórych programistów C++? (419)
- Operatory rzutowania C++ (419)
- Użycie static_cast (420)
- Użycie dynamic_cast i identyfikacja typu w czasie działania (421)
- Użycie reinterpret_cast (425)
- Użycie const_cast (426)
- Problemy z operatorami rzutowania C++ (427)
- Podsumowanie (429)
- Pytania i odpowiedzi (429)
- Warsztaty (430)
Lekcja 14. Wprowadzenie do makr i wzorców (433)
- Preprocesor i kompilator (434)
- Użycie dyrektywy #define do definiowania stałych (434)
- Użycie makr do ochrony przed wielokrotnym dołączaniem (437)
- Użycie dyrektywy #define do definiowania funkcji (438)
- Po co te wszystkie nawiasy? (440)
- Użycie makra assert do sprawdzania wyrażeń (441)
- Wady i zalety użycia funkcji makro (443)
- Wprowadzenie do wzorców (444)
- Składnia deklaracji wzorca (445)
- Różne rodzaje deklaracji wzorca (446)
- Funkcje wzorca (446)
- Wzorce i bezpieczeństwo typów (448)
- Klasy wzorca (449)
- Ustanawianie i specjalizacja wzorca (450)
- Deklarowanie wzorców z wieloma parametrami (451)
- Deklarowanie wzorców z parametrami domyślnymi (452)
- Przykład wzorca (452)
- Klasy wzorców i statyczne elementy składowe (454)
- Użycie static_assert do przeprowadzania operacji sprawdzania w trakcie kompilacji (456)
- Użycie wzorców w praktycznym programowaniu C++ (457)
- Podsumowanie (458)
- Pytania i odpowiedzi (458)
- Warsztaty (459)
CZĘŚĆ III. POZNAJEMY STANDARDOWĄ BIBLIOTEKĘ WZORCÓW (STL) (461)
Lekcja 15. Wprowadzenie do standardowej biblioteki wzorców (463)
- Kontenery STL (464)
- Kontenery sekwencyjne (464)
- Kontenery asocjacyjne (465)
- Wybór odpowiedniego kontenera (466)
- Adaptery (469)
- Iteratory STL (470)
- Algorytmy STL (471)
- Oddziaływania między kontenerami i algorytmami za pomocą iteratorów (472)
- Użycie słowa kluczowego auto pozwalającego kompilatorowi na definicję typu (474)
- Klasy STL string (475)
- Podsumowanie (475)
- Pytania i odpowiedzi (475)
- Warsztaty (476)
Lekcja 16. Klasa string w STL (479)
- Dlaczego potrzebna jest klasa służąca do manipulowania ciągami tekstowymi? (480)
- Praca z klasą STL string (481)
- Ustanawianie obiektu STL string i tworzenie kopii (482)
- Uzyskanie dostępu do obiektu string i jego zawartości (484)
- Łączenie ciągów tekstowych (487)
- Wyszukiwanie znaku bądź podciągu tekstowego w obiekcie string (488)
- Skracanie obiektu STL string (490)
- Uproszczenie deklaracji iteratora przy użyciu słowa kluczowego auto (493)
- Odwracanie zawartości ciągu tekstowego (493)
- Konwersja wielkości znaków obiektu string (494)
- Implementacja klasy STL string oparta na wzorcach (496)
- Podsumowanie (496)
- Pytania i odpowiedzi (497)
- Warsztaty (497)
Lekcja 17. Dynamiczne klasy tablic w STL (499)
- Charakterystyka klasy std::vector (500)
- Typowe operacje klasy vector (500)
- Ustanawianie klasy vector (500)
- Wstawianie elementów na końcu przy użyciu push_back() (503)
- Listy inicjalizacyjne (504)
- Wstawianie elementów w określonym położeniu przy użyciu metody insert() (504)
- Uzyskanie dostępu do elementów obiektu vector przy użyciu semantyki tablicy (508)
- Uzyskanie dostępu do elementów obiektu vector przy użyciu semantyki wskaźnika (510)
- Usuwanie elementów z obiektu vector (511)
- Zrozumienie koncepcji wielkości i pojemności (513)
- Klasa STL deque (515)
- Podsumowanie (518)
- Pytania i odpowiedzi (519)
- Warsztaty (520)
Lekcja 18. Klasy STL list i forward_list (523)
- Charakterystyka klasy std::list (524)
- Podstawowe operacje klasy list (524)
- Ustanawianie obiektu std::list (524)
- Wstawianie elementów na początku obiektu list (526)
- Wstawianie elementów w środku obiektu list (529)
- Usuwanie elementów w obiekcie list (531)
- Odwrócenie i sortowanie elementów w obiekcie list (533)
- Odwracanie elementów (534)
- Sortowanie elementów (535)
- Sortowanie i usuwanie elementów listy zawierających obiekty danej klasy (538)
- Podsumowanie (544)
- Pytania i odpowiedzi (545)
- Warsztaty (545)
Lekcja 19. Klasy STL set (547)
- Wprowadzenie do klas STL set (548)
- Podstawowe operacje klas STL set i multiset (549)
- Ustanawianie obiektu std::set (549)
- Wstawianie elementów do obiektów set lub multiset (552)
- Wyszukiwanie elementów w obiektach STL set lub multiset (554)
- Usuwanie elementów z obiektów STL set lub multiset (556)
- Wady i zalety używania obiektów STL set i multiset (562)
- Podsumowanie (566)
- Pytania i odpowiedzi (566)
- Warsztaty (567)
Lekcja 20. Klasy STL map (569)
- Krótkie wprowadzenie do klas STL map (570)
- Podstawowe operacje klas STL map i multimap (571)
- Ustanawianie obiektu std::map lub std::multimap (571)
- Wstawianie elementów do obiektów STL map lub multimap (573)
- Wyszukiwanie elementów w obiekcie STL map (577)
- Wyszukiwanie elementów w obiekcie STL multimap (579)
- Usuwanie elementów z obiektów STL map lub multimap (580)
- Dostarczanie własnego predykatu sortowania (583)
- Jak działa tabela hash? (588)
- Używanie tabel hash w C++11: unordered_map i unordered_multimap (588)
- Podsumowanie (593)
- Pytania i odpowiedzi (593)
- Warsztaty (594)
CZĘŚĆ IV. JESZCZE WIĘCEJ STL (597)
Lekcja 21. Zrozumienie obiektów funkcji (599)
- Koncepcja obiektów funkcji i predykatów (600)
- Typowe aplikacje obiektów funkcji (600)
- Funkcje jednoargumentowe (600)
- Predykat jednoargumentowy (606)
- Funkcje dwuargumentowe (608)
- Predykat dwuargumentowy (611)
- Podsumowanie (614)
- Pytania i odpowiedzi (614)
- Warsztaty (615)
Lekcja 22. Wyrażenia lambda w C++11 (617)
- Czym są wyrażenia lambda? (618)
- W jaki sposób zdefiniować wyrażenie lambda? (619)
- Wyrażenie lambda dla funkcji jednoargumentowej (619)
- Wyrażenie lambda dla predykatu jednoargumentowego (621)
- Wyrażenie lambda wraz ze stanem przy użyciu listy przechwytywania [...\ (622)
- Ogólna składnia wyrażeń lambda (624)
- Wyrażenie lambda dla funkcji dwuargumentowej (626)
- Wyrażenie lambda dla predykatu dwuargumentowego (628)
- Podsumowanie (631)
- Pytania i odpowiedzi (632)
- Warsztaty (632)
Lekcja 23. Algorytmy STL (635)
- Co to są algorytmy STL? (636)
- Klasyfikacja algorytmów STL (636)
- Algorytmy niezmienne (636)
- Algorytmy zmienne (638)
- Używanie algorytmów STL (640)
- Znajdowanie elementów o podanej wartości lub warunku (640)
- Zliczanie elementów o podanej wartości lub warunku (643)
- Wyszukiwanie elementu lub zakresu w kolekcji (645)
- Inicjalizacja w kontenerze elementów wraz z określonymi wartościami (648)
- Użycie std::generate() do inicjalizacji elementów wartościami wygenerowanymi w trakcie działania programu (650)
- Przetwarzanie elementów w zakresie za pomocą for_each (652)
- Przeprowadzanie transformacji zakresu za pomocą std::transform (654)
- Operacje kopiowania i usuwania (657)
- Zastępowanie wartości oraz zastępowanie elementu na podstawie danego warunku (661)
- Sortowanie i przeszukiwanie posortowanej kolekcji oraz usuwanie duplikatów (663)
- Partycjonowanie zakresu (666)
- Wstawianie elementów do posortowanej kolekcji (669)
- Podsumowanie (672)
- Pytania i odpowiedzi (672)
- Warsztaty (673)
Lekcja 24. Kontenery adaptacyjne: stack i queue (675)
- Cechy charakterystyczne zachowania stosów i kolejek (676)
- Stosy (676)
- Kolejki (676)
- Używanie klasy STL stack (677)
- Ustanawianie obiektu stack (677)
- Funkcje składowe klasy stack (679)
- Wstawianie i usuwanie elementów z góry stosu przy użyciu metod push() i pop() (679)
- Używanie klasy STL queue (681)
- Ustanawianie obiektu queue (682)
- Funkcje składowe klasy queue (683)
- Wstawianie na końcu i usuwanie na początku kolejki przy użyciu metod push() i pop() (684)
- Używanie klasy STL priority_queue (686)
- Ustanawianie obiektu priority_queue (686)
- Funkcje składowe klasy priority_queue (688)
- Wstawianie na końcu i usuwanie na początku kolejki priorytetowej przy użyciu metod push() i pop() (689)
- Podsumowanie (692)
- Pytania i odpowiedzi (692)
- Warsztaty (693)
Lekcja 25. Praca z opcjami bitowymi za pomocą STL (695)
- Klasa bitset (696)
- Ustanowienie klasy std::bitset (696)
- Używanie klasy std::bitset i jej elementów składowych (698)
- Operatory std::bitset (698)
- Metody składowe klasy std::bitset (699)
- Klasa vector<bool> (702)
- Ustanowienie klasy vector<bool> (702)
- Używanie klasy vector<bool> (703)
- Podsumowanie (704)
- Pytania i odpowiedzi (705)
- Warsztaty (705)
CZĘŚĆ V. ZAAWANSOWANE KONCEPCJE C++ (707)
Lekcja 26. Sprytne wskaźniki (709)
- Czym są sprytne wskaźniki? (710)
- Na czym polega problem związany z używaniem wskaźników konwencjonalnych? (710)
- W jaki sposób sprytne wskaźniki mogą pomóc? (711)
- W jaki sposób są implementowane sprytne wskaźniki? (711)
- Typy sprytnych wskaźników (713)
- Kopiowanie głębokie (714)
- Mechanizm kopiowania przy zapisie (COW) (716)
- Sprytne wskaźniki zliczania odniesień (716)
- Sprytne wskaźniki powiązane z licznikiem odniesień (717)
- Kopiowanie destrukcyjne (718)
- Używanie klasy std::unique_ptr (720)
- Popularne biblioteki sprytnych wskaźników (722)
- Podsumowanie (723)
- Pytania i...
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-246-8078-8 |
Rozmiar pliku: | 4,5 MB |