#0 Hello, world - SteelPh0enix/KursCPP GitHub Wiki
Na podstawie poniższego spisu treści prawdopodobnie powstanie niedługo videokurs C++a dla początkujących. Do tego momentu, sugeruję zapoznać się z poniższym artykułem jeśli szukasz sprawdzonych i dobrych źródeł nauki: Materiały do nauki C++'a
Poniższe rozdziały dotyczą absolutnych podstaw języka - składni, podstawowych wyrażeń i narzędzi.
Część 0: Hello, world! - Opis języka C++ oraz prezentacja kilku środowisk programistycznych, których możesz używać do pisania kodu.
Część 1: Zmienne - Opis pojęcia zmiennej, oraz przykładowe zastosowania.
Część 2: Podstawowe typy - Lista podstawowych typów, jakie oferuje standard języka.
Część 3: Operatory - Lista operatorów arytmetycznych oraz logicznych, wraz z przykładami ich użycia
Część 4: Instrukcje warunkowe - Opis instrukcji warunkowych if
oraz switch
.
Część 5: Pętle - Opis podstawowych pętli: while
, do
i for
.
Część 6: Funkcje - Podstawowe informacje na temat funkcji, oraz przykłady ich zastosowania
Część 7: Tablice - O tym co to są tablice oraz jak się ich używa.
Część 8: Referencje - Czyli dość prosta droga do optymalizacji kodu
Część 9: Łańcuchy znaków - std::string
- Bezbolesna obsługa tekstu
Część 10: Enumeracje - Proste narzędzie do wyliczania i nie tylko
Część 11: Rzutowania - Czyli jak zamieniać jeden typ, na drugi
Część 12: const
- Bezpieczeństwo i szybkość w jednym
Podsumowanie I - Kalkulator - wykorzystując poznane do tej pory elementy języka, stworzymy kalkulator
Podsumowanie II - Kółko i krzyżyk - wykorzystując poznane elementy języka, napiszemy proste kółko i krzyżyk w konsoli
W tej części opiszę więcej narzędzi udostępnianych przez bibliotekę standardową, oraz nieco bardziej zaawansowane aspekty języka - między innymi podstawy OOP oraz szablonów
Część 13: Wyjątki - O obsłudze błędów słów kilka
Część 14: Struktury i klasy - Podstawy - Wprowadzenie do obiektowej zabawy
Część 15: Struktury i klasy - Dziedziczenie i wirtualność - Czyli o interfejsach oraz dziedziczeniu.
Część 16: Struktury i klasy - Przeładowywanie operatorów - Jak sprawić, żeby nasz typ zachowywał się jak typ
Część 17: Szablony - podstawy - Potężne narzędzie zwiększające elastyczność
Część 18: Lambdy - Takie funkcje, tylko bez nazwy.
Część 19: Dynamiczne zarządzanie pamięcią - new/delete i raw pointery - Jak pisać kod, żeby strzelić sobie w kolano
Część 20: Dynamiczne zarządzanie pamięcią - smart pointery i RAII - Jak pisać kod, żeby nie strzelić sobie w kolano
Część 21: Struktury i klasy - Specjalne konstruktory oraz zasada trzech/pięciu - Czyli o tworzeniu wydajnych, bezpiecznych i działających poprawnie klas
Podsumowanie III - Swój własny vector - Wykorzystując poznane elementy języka, napiszemy własną, podstawową implementację tablicy dynamicznej
std::string
- Typ łańcucha znaków typu char
std::to_string
- Funkcja konwertująca typ liczbowy na std::string
Konwersja std::string
na typ liczbowy - Lista i opis funkcji przeznaczonych do konwersji z std::string
do typu liczbowego
std::fstream
- Strumień I/O dla plików
std::stringstream
- Strumień I/O dla string
ów
std::iostream
- Bazowa klasa dla strumieni I/O
Manipulatory - Opis manipulatorów dla strumieni
std::array
- Tablica statyczna
std::vector
- Tablica dynamiczna
std::deque
- Podwójnie zakończona kolejka
std::forward_list
- Pojedynczo linkowana lista
std::list
- Linkowana lista
std::set
/std::unordered_set
- Posortowany/nieposortowany zbiór unikalnych wartości
std::map
/std::unordered_map
- Posortowany/nieposortowany zbiór elementów klucz-wartość z unikalnym kluczem
std::multiset
/std::unordeded_multiset
- Posortowany/nieposortowany Zbiór wartości
std::multimap
/std::unordered_multimap
- Posortowany/nieposortowany zbiór elementów klucz-wartość
std::stack
- Adaptacja stosu
std::queue
- Adaptacja kolejki
std::priority_queue
- Adaptacja priorytetowej kolejki
std::initializer_list
- Lista inicjalizacyjna
std::tuple
- Krotka, zbiór wartości różnych typów
std::pair
- Para wartości tego samego typu
std::swap
- Zamienia wartości dwóch obiektów
std::move
oraz prawostronne referencje - Uzyskuje prawostronną referencję
std::hash
- Funkcja hashująca
std::unique_ptr
- Smart pointer dla obiektu z pojedynczym właścicielem
std::shared_ptr
- Smart pointer dla obiektu z wieloma właścicielami
std::weak_ptr
- Słaby wskaźnik do obiektu
std::exception
- Bazowa klasa dla wyjątku
std::terminate
- Funkcja wywoływana w momencie wystąpienia nieobsłużonego wyjątku, lub w celu zamknięcia programu
Biblioteka <chrono>
- Biblioteka do obsługi czasu
Biblioteka <ctime>
- Biblioteka języka C do obsługi czasu
Biblioteka <random>
- Generowanie liczb pseudolosowych
std::thread
- Wątek
std::sleep_for
- Funkcja usypiająca wątek na dany okres
Mutexy i zamki - Obiekty będące w stanie zabezpieczyć wątki przed wyścigiem do danych (data race)
Asynchroniczność - Alternatywa dla wątków
Dlaczego using namespace
to zła praktyka? - Opis niebezpieczeństw związanych z nieświadomym używaniem using namespace
, oraz alternatywy.
Porównanie szybkości silników generowania liczb pseudolosowych z C++11 - Benchmark silników generowania liczb pseudolosowych z biblioteki <random>
, porównanie ich ze starym std::rand
i przykład użycia.
† Poniższy spis przedstawia listę najbardziej użytecznych (według mnie) rzeczy ze standardu języka. Linki prowadzą na zewnętrzny serwis cppreference.com, który jest chyba najsensowniejszą referencją języka C++ dostępną online.