100943700

Page 1


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

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.