Статья Автор: Деникина Н.В., Деникин А.В.

C++ vs Python

Главные отличия C++ от Python

  1. Компилируемый vs. Интерпретируемый: C++ нужно скомпилировать в машинный код перед запуском. Это делает программу быстрой, но добавляет шаг компиляции.

  2. Статическая типизация: Тип переменной указывается при объявлении и не может быть изменен.

  3. Управление памятью: В C++ вы сами управляете памятью (с помощью new/delete), хотя есть умные указатели, которые помогают.

  4. Синтаксис: Точка с запятой (;) в конце инструкций и фигурные скобки ({}) для блоков кода — обязательны.


Базовый синтаксис

1. Структура программы

// Подключение библиотек (аналог import в Python)
#include <iostream> // для ввода/вывода

// Пространство имен (чтобы не писать std:: перед каждой командой)
using namespace std;

// Главная функция - точка входа в программу (аналог if __name__ == "__main__":)
int main() {
    // Ваш код здесь

    return 0; // Возврат кода успешного завершения
}

2. Переменные и типы данных

Python (динамическая типизация) C++ (статическая типизация)
x = 10 int x = 10;
name = "Hello" string name = "Hello";
is_valid = True bool is_valid = true;
pi = 3.14 double pi = 3.14;

Основные типы:

  • int - целое число (в олимпиадных задачах лучше использовать long long - диапазон значений больше)

  • float / double - числа с плавающей точкой

  • char - один символ ('a')

  • bool - логический тип (true / false)

  • string - строка (требует #include <string>)

Константы:
const int MAX_SIZE = 100; (аналог MAX_SIZE = 100 в Python, но с проверкой на этапе компиляции).

3. Ввод и вывод

Действие Python C++
Вывод print("Hello", name) cout << "Hello " << name << endl;
Ввод name = input() cin >> name;
  • cout (console output) - для вывода. Оператор << означает "отправить в".

  • cin (console input) - для ввода. Оператор >> означает "взять из".

  • endl - перенос строки (как \n).

4. Условные операторы (if/else)

Очень похожи на Python, но условия обязательно в круглых скобках.

# Python
if x > 10:
    print("Больше")
elif x == 10:
    print("Равно")
else:
    print("Меньше")
 
// C++
if (x > 10) {
    cout << "Больше" << endl;
}
else if (x == 10) {
    cout << "Равно" << endl;
}
else {
    cout << "Меньше" << endl;
}

5. Циклы

Цикл while - почти идентичен.

# Python
while x > 0:
    print(x)
    x -= 1
 
// C++
while (x > 0) {
    cout << x << endl;
    x--;
}

Цикл for - сильно отличается. В C++ он чаще используется для перебора с счетчиком.

# Python (перебор по коллекции)
for i in range(0, 10, 2):
    print(i)
 
// C++ (инициализация; условие; шаг)
for (int i = 0; i < 10; i += 2) {
    cout << i << endl;
}

6. Функции

Тип возвращаемого значения и типы аргументов обязательно указываются.

 
# Python
def add(a, b):
    return a + b

result = add(5, 3)
 
// C++
// Тип возвращаемого значения (int), имя функции, типы аргументов (int a, int b)
int add(int a, int b) {
    return a + b;
}

int main() {
    int result = add(5, 3); // Вызов функции
    return 0;
}

Передача по ссылке (важно!): В C++ по умолчанию аргументы передаются по значению (создается копия). Чтобы функция могла изменить переданную переменную, используют ссылки (&).

void increment(int &x) { // x - ссылка на переданную переменную
    x = x + 1;
}

int main() {
    int num = 5;
    increment(num); // Теперь num = 6!
    return 0;
}

7. Работа с памятью: указатели

Это новая концепция, аналогов которой в Python нет. Указатель (*) — это переменная, которая хранит адрес памяти другой переменной.

int main() {
    int age = 25;   // обычная переменная
    int *p_age = &age; // указатель, хранящий адрес переменной age (оператор &)

    cout << age << endl;   // Вывод значения age (25)
    cout << p_age << endl; // Вывод адреса памяти, где лежит age (например, 0x7ffd42a)
    cout << *p_age << endl; // Разыменование: вывод значения по адресу (25)

    *p_age = 30; // Меняем значение по адресу
    cout << age << endl; // Теперь age = 30

    return 0;
}

8. Вектор (аналог списка в Python)

Стандартный динамический массив. Требует #include <vector>.

Действие Python C++ (вектор)
Создание my_list = []
my_list = [1, 2, 3]
vector<int> my_vec;
vector<int> my_vec = {1, 2, 3};
Добавление my_list.append(4) my_vec.push_back(4);
Размер len(my_list) my_vec.size()
Доступ my_list[0] my_vec[0]

Перебор вектора (современный способ):

vector<int> vec = {1, 2, 3};
for (int value : vec) { // Аналог for value in vec: в Python
    cout << value << endl;
}

Ключевые выводы для быстрого старта

  1. Всегда указывайте типы для переменных и функций.

  2. Не забывайте ; в конце инструкций.

  3. Используйте {} для обозначения блоков кода.

  4. Вектор — ваш лучший друг для замены списков.

  5. Указатели — сложная, но фундаментальная часть языка. Пока просто знайте об их существовании.

Печать