SZCZEGÓŁOWY SPIS TREŚCI
PODZIĘKOWANIA
WSTĘP
O książce
Dla kogo jest przeznaczona ta książka? xxxiii
Co znajduje się w tej książce?
Część I: Język C++ xxxiii
Część II: Biblioteki i platformy
WSTĘP DLA PROGRAMISTÓW C xxxvii
Uaktualnienie języka C do Super C xxxix Przeciążanie funkcji
xxxix
Referencje xl
Inicjalizacja z użyciem słowa kluczowego auto
Przestrzenie nazw i niejawne użycie słowa typedef z typami struct, union i enum
xliii
xliv
Łączenie plików obiektowych języków C i C++ xlvi
Główne cechy języka C++
xlvii
Zwięzłe wyrażanie idei i ponowne wykorzystanie kodu xlviii
Biblioteka standardowa C++
Wyrażenia lambda li
Programowanie generyczne z użyciem szablonów
Niezmienniki klas i zarządzanie zasobami liii
Semantyka przenoszenia
Zrelaksuj się i ciesz się swoimi nowymi butami
pierwszego pliku źródłowego w języku
lvii
Operator odwołania do składowej przez wskaźnik
i tablice
są niebezpieczne
Użycie wskaźników i referencji
Jednokierunkowe listy łączone: podstawowa struktura oparta na wskaźnikach
referencji
bezpieczeństwa za pomocą słowa kluczowego
Listy inicjalizacyjne składowych
Dedukcja typu z użyciem słowa kluczowego auto
Inicjalizacja z użyciem
przechowywania lokalny dla wątku
cyklu życia obiektu
Klasy wyjątków biblioteki stdlib
kluczowe noexcept
wywołań i wyjątki
klasy SimpleString
do l-wartości i r-wartości
Aktualizacja programu rejestrującego transakcje bankowe
między wstrzykiwaniem konstruktorem a wstrzykiwaniem przez właściwości
Tworzenie konceptów z wyrażeń requires
Użycie konceptów
Doraźne wyrażenia requires
Wyrażenie static_assert: rozwiązanie tymczasowe dla kodu bez konceptów
Parametry szablonowe niebędące typami
Szablony wariadyczne
Zaawansowane zagadnienia związane z szablonami
Specjalizacja szablonu
Wiązanie nazw
Funkcja typu
Metaprogramowanie szablonów
Organizacja kodu źródłowego szablonów
Polimorfizm czasu kompilacji a polimorfizm czasu wykonania
Podsumowanie
7 WYRAŻENIA
Operatory
Operatory logiczne
Operatory arytmetyczne
Operatory przypisania
Operatory inkrementacji i dekrementacji
Operatory porównania
Operatory dostępu do składowych
Trójargumentowy operator warunkowy
Przeciążenie operatora
operatora new
Priorytet i łączność operatorów
Kolejność ewaluacji
Literały definiowane przez użytkownika
typów
Niejawne konwersje typów
konwersje typów
Rzutowania w stylu C
Konwersje typów definiowane przez użytkownika
stałe
Wiązania strukturalne
Atrybuty
Instrukcje wyboru
Instrukcje if
Instrukcje switch
Instrukcje iteracyjne
Pętle while
Pętle do-while
Pętle for
Pętle for oparte na zakresie
Instrukcje skoku
Instrukcje break
Instrukcje continue
Instrukcje goto
Modyfikatory przyrostkowe
Użycie słowa kluczowego auto w szablonach funkcji
przeciążenia
Funkcje wariadyczne
wariadyczne
Programowanie z użyciem pakietu parametrów
zaprogramowanie funkcji
II: BIBLIOTEKI I PLATFORMY
Testy jednostkowe
Testy integracyjne
Testy akceptacyjne
Testy wydajnościowe
Zaawansowany przykład: operacja hamowania
Implementacja klasy AutoBrake
Projektowanie sterowane testami (TDD)
Dodawanie interfejsu do magistrali usługowej
Testy jednostkowe i platformy imitacyjne
Catch: platforma zarządzająca testami jednostkowymi
Podsumowanie: platformy testujące
Inne platformy imitacyjne: FakeIt i Trompeloeil
inteligentne
konwersja na typ logiczny na podstawie prawa własności
Wspierane operacje
Własność niewyłączna i przenaszalna
lista wspieranych operacji
Wzorce zaawansowane
Wskaźniki instrusive_ptr
Podsumowanie opcji związanych ze wskaźnikami inteligentnymi
Alokatory
Podsumowanie
NARZĘDZIA
Struktury danych
Drzewa właściwości w bibliotece Boost
Kontener initializer_list
Podsumowanie
Kategorie iteratorów
Iteratory wyjściowe
Iteratory wejściowe
Iteratory postępujące
Iteratory dwukierunkowe
Iteratory o dostępie swobodnym
Iteratory ciągłe
Iteratory mutowalne
Pomocnicze funkcje iteratorów
Funkcja std::advance
Funkcje std::next i std::prev
Funkcje std::distance
Funkcje std::iter_swap
Dodatkowe adaptery iteratorów
Adaptery iteratorów przenoszących
Adaptery iteratorów wstecznych 509
Podsumowanie
Typ std::string
Zarządzanie pamięcią i optymalizacje niewielkich łańcuchów
Dostęp do elementów i iteratorów
łańcuchów
Przetwarzanie elementów
Konwersje numeryczne
wspierane przez klasę string_view
własności, użycie i wydajność
Klasa basic_regex
Algorytmy związane z łańcuchami dostępne w pakiecie Boost 545
Zakresy biblioteki Boost
Algorytmy modyfikujące
Dzielenie i łączenie
Wyszukiwanie
Tokenizer z pakietu Boost
Lokalizacje
Podsumowanie
16
STRUMIENIE
Strumienie
Klasy strumieni
Stan strumienia
Buforowanie i opróżnianie bufora
Manipulatory
Typy zdefiniowane przez użytkownika
Strumienie związane z łańcuchami
Strumienie plikowe
Bufory strumieniowe 585
Dostęp swobodny
Pojęcia dotyczące systemu plików
Klasa std::filesystem::path 592
Tworzenie ścieżek
Dzielenie ścieżek na części składowe 593
Modyfikowanie ścieżek
Podsumowanie metod związanych z systemem plików dostępnych w klasie path
i katalogi
Obsługa błędów
Funkcje tworzące ścieżkę
Sprawdzanie typów plików
Sprawdzanie plików i katalogów
iterowanie po katalogach
Wykorzystanie strumieni fstream
Złożoność obliczeniowa algorytmów
Zasady wykonywania
Operacje niemodyfikujące kolekcje
Algorytm any_of
Algorytm for_each
Algorytm for_each_n
Algorytmy find, find_if i find_if_not
Algorytm find_end
Algorytm find_first_of
Algorytm adjacent_find
Algorytmy count i count_if
Algorytm mismatch
Algorytm is_permutation
Algorytm search_n
Operacje modyfikujące kolekcje
Algorytm copy
Algorytm copy_n
copy_backward
Algorytm move
Algorytm move_backward 640
Algorytm swap_ranges
transform
Algorytm replace
Algorytm generate
Algorytm remove
Algorytm unique
reverse
Algorytm sample
Algorytm shuffle
Operacje związane z sortowaniem
Algorytm stable_sort
Algorytm partial_sort
Algorytm is_sorted
Algorytm nth_element
Algorytm lower_bound
upper_bound
Algorytm equal_range
binary_search 666
Algorytmy oparte na podziałach
Algorytm is_partitioned
Algorytm partition
partition_copy
Algorytm stable_partition
Algorytmy scalające
Algorytm merge
Algorytmy wartości ekstremalnych 673
Algorytmy min i max
Algorytmy min_element i max_element
Operacje numeryczne
Przydatne operatory
Algorytm iota
Algorytm accumulate
Algorytm adjacent_difference
algorytmy
Biblioteka Boost Algorithm
współbieżne
Zadania asynchroniczne
Współdzielenie i koordynacja
Niskopoziomowe funkcje związane ze współbieżnością
równoległe
Przykład: sortowanie równoległe
Algorytmy równoległe nie są magiczne
Podsumowanie
20 PROGRAMOWANIE SIECIOWE Z UŻYCIEM
biblioteki Boost Asio
Programowanie sieciowe z użyciem biblioteki Asio
nazwy hosta
danych z buforów i zapisywanie do nich
HTTP
zagadnienia związane z kompilacją
Konsolidacja z językiem C
SKOROWIDZ
#include <cstdio>
struct ClockOfTheLongNow { } } -};
int main() { ClockOfTheLongNow clock{ 2020 }; }
Year: 2020
int a = 0; int b{};
int c = {};
int d;
int e = 42; int f{ 42 }; int g = { 42 }; int h(42);
#include <cstdint>
struct PodStruct { uint64_t a; char b[256]; bool c; };
int main() {
PodStruct initialized_pod1{};
PodStruct initialized_pod2 = {};
PodStruct initialized_pod3{ 42, "Hello" }; // Pola a i b ustawione; c = 0
PodStruct initialized_pod4{ 42, "Hello", true }; }
PodStruct initialized_pod = 0;
initiali-
zed_pod3 a i b 42 i "Hello" c false initialized_ pod4 c true.
PodStruct initialized_pod4 = { 42, "Hello", true };
PodStruct initialized_pod4 = { 42, true };
PodStruct initialized_pod(42, "Hello", true);
int main() { // Tablica o rozmiarze 3; 1, 2, 3 // Tablica o rozmiarze 5; 0, 0, 0, 0, 0 // Tablica o rozmiarze 5; 1, 2, 3, 0, 0 }
#include <cstdio>
struct Taxonomist { Taxonomist() { printf("(no argument)\n");
}
Taxonomist(char x) { printf("char: %c\n", x);
}
Taxonomist(int x) { printf("int: %d\n", x); }
Taxonomist(float x) { printf("float: %f\n", x); } };
Ordered Regular
szablonu
remove_if 22 i 44 . vectorlist • capacity, reserve, • operator[], at
data list nie -
tener deque vector lst, lst1 i lst2 std::list<T> t T std::list
lst.emplace_front(...) lst.
lst.push_front(t) lst t
lst.pop_front() lst.
lst.push_back(t) t lst
lst.pop_back() lst
lst1.splice(itr1, lst2, [itr2a], [itr2b])
lst2 do lst1 itr1 itr2a itr2a do itr2b.
lst.remove(t) t
lst.remove_if(pred) pred true pred T.
lst.unique(pred) lst pred T t1 == t2
lst1.merge(lst2, comp) lst1 i lst2 comp T t1 < t2
lst.sort(comp) lst comp
lst.reverse() lst lst
std::stack <stack>. stackintdeque vector deque. stackdeque, vector list stack push i pop push_back i pop_backtora, typ stack deque top. stack vector.
#include <stack>
TEST_CASE("std::stack supports push/pop/top operations") { std::vector<int> vec{ 1, 3 }; // 1 3
s.size() s.top()
pop 2 na stosiepop-top-pop . stack. s, s1 i s2
std::stack<T>, t T ctr .
std::stack T ctr deque true
s.push(t) t s.emplace(...) T ...
s.pop()
s1.swap(s2) swap(s1, s2) s1 i s2
bie FIFO
std::queue <queue> typ stack queuedeque. queue deque list
front back queue deque
#include <queue>
TEST_CASE("std::queue supports push/pop/front/back") { std::deque<int> deq{ 1, 2 };
q.size() q.front() q.back() q.push(t) t q.emplace(...) T
q.pop() q1.swap(q2) swap(q1, q2) q1 i q2