Menu
Coddy logo textTech

Шпаргалка по C++

Последнее обновление

Hello World и структура программы

Выполнение начинается с main, который возвращает int.

ЭлементКод
Подключить заголовок#include <iostream>
Точка входаint main() { ... }
Вывести строкуstd::cout << "Hello, World!" << std::endl;
Считать вводstd::cin >> x;
Использовать пространство имён stdusing namespace std;
Вернуть признак успехаreturn 0;
Комментарии// line и /* block */

Типы данных

ТипОписание
intЦелое (обычно 32 бита)
long / long longБолее широкие целые
float / doubleЧисла с плавающей точкой
charОдин байт / символ
booltrue или false
std::stringДинамический текст из <string>
autoКомпилятор выводит тип
std::size_tБеззнаковый тип для размеров и индексов

Переменные и ссылки

Ссылки - это псевдонимы; указатели хранят адреса.

ОперацияСинтаксис
Объявить и инициализироватьint x = 5;
Инициализация фигурными скобкамиint x{5};
Константаconst double PI = 3.14159;
Константа времени компиляцииconstexpr int N = 10;
Ссылка (псевдоним)int &r = x;
Указательint *p = &x;
Разыменовать указатель*p = 10;
Вывод типаauto y = 3.14;

Управление потоком

КонструкцияСинтаксис
If / elseif (x > 0) { ... } else { ... }
Switchswitch (n) { case 1: ...; break; default: ...; }
Цикл whilewhile (i < n) { ... }
Цикл do-whiledo { ... } while (i < n);
Цикл forfor (int i = 0; i < n; i++) { ... }
For по диапазонуfor (auto x : vec) { ... }
For по диапазону по ссылкеfor (auto &x : vec) { ... }
Break / continuebreak; выходит из цикла, continue; переходит к следующей итерации

Функции

ОперацияСинтаксис
Определить функциюint add(int a, int b) { return a + b; }
Без возвращаемого значенияvoid greet() { ... }
Аргументы по умолчаниюint pow(int b, int e = 2) { ... }
Передача по ссылкеvoid inc(int &x) { x++; }
Константная ссылка (без копии)void print(const std::string &s) { ... }
Перегрузкаint max(int a, int b); и double max(double a, double b);
Лямбдаauto f = [](int x) { return x * 2; };
Лямбда с захватомauto g = [n](int x) { return x + n; };

Классы и ООП

ОперацияСинтаксис
Определить классclass Dog { ... };
Спецификаторы доступаpublic:, private:, protected:
Поле-членstd::string name;
КонструкторDog(std::string n) : name(n) {}
Деструктор~Dog() { ... }
Функция-членvoid bark() { ... }
Создать объектDog d("Rex");
Наследованиеclass Puppy : public Dog { ... };
Виртуальная функцияvirtual void speak();

Контейнеры STL

Распространённые контейнеры из стандартной библиотеки.

КонтейнерПрименение и пример
std::vector<int>Динамический массив: v.push_back(1); v.size();
std::stringТекст: s += "!"; s.length();
std::array<int, 3>Массив фиксированного размера со сведениями о границах
std::map<K, V>Отсортированный ключ-значение: m["a"] = 1;
std::unordered_map<K, V>Хеш-таблица (быстрый поиск, без порядка)
std::set<T>Отсортированные уникальные значения: s.insert(5);
std::pair<A, B>Два значения: make_pair(1, "x")
std::queue / std::stackАдаптеры очереди FIFO / стека LIFO

Алгоритмы и итераторы STL

Из <algorithm>; большинство принимает диапазон итераторов begin/end.

ОперацияСинтаксис
Итераторы begin / endv.begin(), v.end()
Сортировкаstd::sort(v.begin(), v.end());
Сортировка по убываниюstd::sort(v.begin(), v.end(), std::greater<int>());
Найти значениеauto it = std::find(v.begin(), v.end(), 5);
Посчитать совпаденияstd::count(v.begin(), v.end(), 5);
Минимальный / максимальный элементstd::max_element(v.begin(), v.end());
Сумма по диапазонуstd::accumulate(v.begin(), v.end(), 0);
Преобразовать каждый элементstd::transform(v.begin(), v.end(), v.begin(), fn);

Умные указатели и современный C++

Предпочитайте умные указатели сырым new/delete для автоматической очистки.

ВозможностьСинтаксис
Единоличное владениеauto p = std::make_unique<Dog>("Rex");
Совместное владениеauto p = std::make_shared<Dog>("Rex");
Невладеющая ссылкаstd::weak_ptr<Dog> w = p;
Семантика перемещенияauto v2 = std::move(v1);
Nullptrint *p = nullptr;
Структурные привязкиauto [key, val] = *it;
Опциональное значениеstd::optional<int> maybe;
Шаблоныtemplate <typename T> T add(T a, T b) { return a + b; }

Синтаксис C++, контейнеры STL и современные возможности, которые нужны чаще всего, на одной странице. Эта шпаргалка по C++ - быстрый справочник для написания кода на C++: типы данных, ссылки, классы, контейнеры и алгоритмы стандартной библиотеки, а также умные указатели, заменяющие сырые new/delete.

Всё здесь - стандартный C++ (C++11 и новее), который компилируется с помощью g++ или clang++. Копируйте нужное или попробуйте любой фрагмент вживую в playground для C++ - без установки компилятора.

Часто задаваемые вопросы по шпаргалке C++

Эта шпаргалка по C++ бесплатна?
Да. Эта шпаргалка по C++ полностью бесплатна, регистрация не требуется. Добавьте её в закладки и возвращайтесь, когда нужно посмотреть синтаксис, контейнер STL или умный указатель.
В чём разница между указателем и ссылкой в C++?
Указатель - это переменная, которая хранит адрес; он может быть нулевым, переназначаться на другой объект, и вы разыменовываете его через *p. Ссылка (int &r = x) - это псевдоним существующей переменной: она должна быть связана при объявлении, никогда не может быть нулевой или перепривязанной и используется как сама переменная. Используйте ссылки для более чистой передачи параметров по ссылке, а указатели - когда нужна необязательная или переназначаемая косвенность.
Что использовать - new/delete или умные указатели?
Предпочитайте умные указатели. std::unique_ptr и std::shared_ptr (через make_unique/make_shared) автоматически освобождают свою память при выходе из области видимости, что предотвращает утечки и двойные освобождения, свойственные ручным new/delete. Используйте сырые new/delete только в низкоуровневом коде, где для этого есть конкретная причина.
Можно ли практиковать C++ онлайн?
Да. Откройте playground для C++, чтобы скомпилировать и запустить любой фрагмент из этой шпаргалки прямо в браузере - без установки компилятора. А если нужна структура, бесплатный интерактивный курс C++ от Coddy шаг за шагом проведёт вас от переменных и циклов до классов и STL.
Подходит ли эта шпаргалка для начинающих?
Да. Она построена от самых распространённых строительных блоков (типы, управление потоком, функции) к продвинутым (STL и умные указатели), так что верхние разделы можно использовать с первого дня и постепенно осваивать остальное.
Coddy programming languages illustration

Изучайте C++ с Coddy

НАЧАТЬ