C++ Cheat Sheet: ściąga z C++
Ostatnia aktualizacja
Hello World i struktura programu
Wykonanie zaczyna się w main, która zwraca int.
| Element | Kod |
|---|---|
| Dołączenie nagłówka | #include <iostream> |
| Punkt wejścia | int main() { ... } |
| Wypisanie linii | std::cout << "Hello, World!" << std::endl; |
| Odczyt danych wejściowych | std::cin >> x; |
| Użycie przestrzeni nazw std | using namespace std; |
| Zwrócenie sukcesu | return 0; |
| Komentarze | // line i /* block */ |
Typy danych
| Typ | Opis |
|---|---|
int | Liczba całkowita (zwykle 32 bity) |
long / long long | Szersze liczby całkowite |
float / double | Liczby zmiennoprzecinkowe |
char | Pojedynczy bajt / znak |
bool | true lub false |
std::string | Dynamiczny tekst z <string> |
auto | Kompilator sam ustala typ |
std::size_t | Typ bez znaku dla rozmiarów i indeksów |
Zmienne i referencje
Referencje to aliasy; wskaźniki przechowują adresy.
| Operacja | Składnia |
|---|---|
| Deklaracja i inicjalizacja | int x = 5; |
| Inicjalizacja klamrowa | int x{5}; |
| Stała | const double PI = 3.14159; |
| Stała czasu kompilacji | constexpr int N = 10; |
| Referencja (alias) | int &r = x; |
| Wskaźnik | int *p = &x; |
| Dereferencja wskaźnika | *p = 10; |
| Wnioskowanie typu | auto y = 3.14; |
Sterowanie przepływem
| Instrukcja | Składnia |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| Switch | switch (n) { case 1: ...; break; default: ...; } |
| Pętla while | while (i < n) { ... } |
| Pętla do-while | do { ... } while (i < n); |
| Pętla for | for (int i = 0; i < n; i++) { ... } |
| Pętla for po zakresie | for (auto x : vec) { ... } |
| Pętla po zakresie przez referencję | for (auto &x : vec) { ... } |
| Break / continue | break; wychodzi z pętli, continue; przechodzi do następnej iteracji |
Funkcje
| Operacja | Składnia |
|---|---|
| Definicja funkcji | int add(int a, int b) { return a + b; } |
| Bez wartości zwracanej | void greet() { ... } |
| Argumenty domyślne | int pow(int b, int e = 2) { ... } |
| Przekazanie przez referencję | void inc(int &x) { x++; } |
| Stała referencja (bez kopiowania) | void print(const std::string &s) { ... } |
| Przeciążanie | int max(int a, int b); i double max(double a, double b); |
| Lambda | auto f = [](int x) { return x * 2; }; |
| Lambda z przechwytywaniem | auto g = [n](int x) { return x + n; }; |
Klasy i OOP
| Operacja | Składnia |
|---|---|
| Definicja klasy | class Dog { ... }; |
| Modyfikatory dostępu | public:, private:, protected: |
| Pole klasy | std::string name; |
| Konstruktor | Dog(std::string n) : name(n) {} |
| Destruktor | ~Dog() { ... } |
| Metoda | void bark() { ... } |
| Utworzenie obiektu | Dog d("Rex"); |
| Dziedziczenie | class Puppy : public Dog { ... }; |
| Funkcja wirtualna | virtual void speak(); |
Kontenery STL
Popularne kontenery z biblioteki standardowej.
| Kontener | Zastosowanie i przykład |
|---|---|
std::vector<int> | Tablica dynamiczna: v.push_back(1); v.size(); |
std::string | Tekst: s += "!"; s.length(); |
std::array<int, 3> | Tablica o stałym rozmiarze ze znanymi granicami |
std::map<K, V> | Posortowane pary klucz-wartość: m["a"] = 1; |
std::unordered_map<K, V> | Mapa haszująca (szybsze wyszukiwanie, bez kolejności) |
std::set<T> | Posortowane unikalne wartości: s.insert(5); |
std::pair<A, B> | Dwie wartości: make_pair(1, "x") |
std::queue / std::stack | Adaptery kolejki FIFO / stosu LIFO |
Algorytmy i iteratory STL
Z <algorithm>; większość przyjmuje zakres iteratorów begin/end.
| Operacja | Składnia |
|---|---|
| Iteratory początku / końca | v.begin(), v.end() |
| Sortowanie | std::sort(v.begin(), v.end()); |
| Sortowanie malejąco | std::sort(v.begin(), v.end(), std::greater<int>()); |
| Wyszukanie wartości | auto it = std::find(v.begin(), v.end(), 5); |
| Zliczenie wystąpień | std::count(v.begin(), v.end(), 5); |
| Element minimalny / maksymalny | std::max_element(v.begin(), v.end()); |
| Suma zakresu | std::accumulate(v.begin(), v.end(), 0); |
| Przekształcenie każdego elementu | std::transform(v.begin(), v.end(), v.begin(), fn); |
Inteligentne wskaźniki i nowoczesny C++
Zamiast surowych new/delete używaj inteligentnych wskaźników, które same sprzątają pamięć.
| Funkcja | Składnia |
|---|---|
| Wyłączna własność | auto p = std::make_unique<Dog>("Rex"); |
| Współdzielona własność | auto p = std::make_shared<Dog>("Rex"); |
| Referencja bez własności | std::weak_ptr<Dog> w = p; |
| Semantyka przenoszenia | auto v2 = std::move(v1); |
| Nullptr | int *p = nullptr; |
| Wiązania strukturalne | auto [key, val] = *it; |
| Wartość opcjonalna | std::optional<int> maybe; |
| Szablony | template <typename T> T add(T a, T b) { return a + b; } |
Najczęściej używana składnia C++, kontenery STL i nowoczesne funkcje języka na jednej stronie. Ten C++ cheat sheet to szybka ściąga do pisania w C++: typy danych, referencje, klasy, kontenery biblioteki standardowej, takie jak vector i unordered_map, oraz inteligentne wskaźniki, które zastępują surowe new/delete.
Wszystko tutaj to standardowy C++ (C++11 i nowsze), który kompiluje się w g++ lub clang++. Skopiuj to, czego potrzebujesz, albo uruchom dowolny fragment w edytorze online C++, bez instalowania kompilatora. Uczysz się języka? Darmowy interaktywny kurs C++ w Coddy krok po kroku uczy wskaźników, STL i klas.
C++ cheat sheet: najczęstsze pytania
Czy ten C++ cheat sheet jest darmowy?
Czym różni się wskaźnik od referencji w C++?
*p. Referencja (int &r = x) to alias istniejącej zmiennej: trzeba ją powiązać przy deklaracji, nigdy nie może być pusta ani wskazywać na coś innego i używa się jej tak jak samej zmiennej. Referencji używaj do czytelnego przekazywania parametrów, a wskaźników, gdy potrzebujesz pośrednictwa opcjonalnego lub zmiennego.Używać new/delete czy inteligentnych wskaźników?
std::unique_ptr i std::shared_ptr (tworzone przez make_unique/make_shared) same zwalniają pamięć, gdy wychodzą poza zakres, co zapobiega wyciekom i podwójnemu zwalnianiu typowym dla ręcznego new/delete. Po surowe new/delete sięgaj tylko w kodzie niskopoziomowym, gdy jest ku temu konkretny powód.