Это важный аспект программирования на C++, так как язык предоставляет разработчику возможность контролировать выделение и освобождение памяти.
Основные моменты:
• Выделение памяти — new для выделения памяти в динамической памяти.
• Освобождение памяти — delete для освобождения выделенной памяти.
• Массивы — Для массивов используйте new[] и delete[].
🔥 — если узнал новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝47🔥23👍2
👍16🔥7
This media is not supported in your browser
VIEW IN TELEGRAM
Stepik — это обучающая платформа, которая предоставляет онлайн-курсы и интерактивные задания по программированию
📌 Ссылочка: stepik.org
📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17😁9🔥2
В этой статье:
• Вы узнаете, как сделать 3D рендер прямо в консоли без каких-либо графических библиотек с помощью метода Raycast.
🔊 Если заинтересовало, можешь продолжить читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18😁4👎1🔥1
Они позволяют создавать функции, которые могут принимать параметры различных типов. При вызове функции компилятор генерирует конкретную версию функции для каждого типа.
Вот общий синтаксис для объявления шаблона функции:
template <typename T>
T functionName(T parameter1, T parameter2) {
// Тело функции
}
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍5😁1
This media is not supported in your browser
VIEW IN TELEGRAM
learncpp — сайт, который предлагает полное и пошаговое руководство по изучению C++, охватывающее как основные, так и продвинутые концепции с практическими примерами и заданиями.
📌 Ссылочка: learncpp.com
📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍5
Рекурсия в C++: что нужно знать, чтобы избежать ошибок
#новичкам
Рекурсия — это способ, при котором функция вызывает саму себя для решения задач, разделяя их на более простые подзадачи.
Простейший пример — вычисление факториала. Например, функция принимает число n и возвращает результат умножения всех чисел от 1 до n. Здесь важно предусмотреть базовый случай, который завершает рекурсию:
Однако, если базовый случай отсутствует, программа уйдёт в бесконечный цикл, что вызовет переполнение стека и такая ошибка приведёт к краху программы, поэтому всегда нужно чётко определять момент завершения:
А для оптимизации можно использовать хвостовую рекурсию. Это способ передачи промежуточного результата через параметры функции, чтобы минимизировать затраты на стек вызовов:
🔥 Так что эти простые приёмы помогут вам избежать ошибок и написать более эффективный код. Удачи!
📣 C++ Ready | #практика
#новичкам
Рекурсия — это способ, при котором функция вызывает саму себя для решения задач, разделяя их на более простые подзадачи.
Простейший пример — вычисление факториала. Например, функция принимает число n и возвращает результат умножения всех чисел от 1 до n. Здесь важно предусмотреть базовый случай, который завершает рекурсию:
int factorial(int n) {
return (n == 0) ? 1 : n * factorial(n - 1);
}
Однако, если базовый случай отсутствует, программа уйдёт в бесконечный цикл, что вызовет переполнение стека и такая ошибка приведёт к краху программы, поэтому всегда нужно чётко определять момент завершения:
void infiniteRecursion() {
infiniteRecursion(); // рекурсия без выхода
}
А для оптимизации можно использовать хвостовую рекурсию. Это способ передачи промежуточного результата через параметры функции, чтобы минимизировать затраты на стек вызовов:
int tailFactorial(int n, int result = 1) {
return (n == 0) ? result : tailFactorial(n - 1, result * n);
}
🔥 Так что эти простые приёмы помогут вам избежать ошибок и написать более эффективный код. Удачи!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍5
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥6
Хороший бесплатный курс, в котором вы обучитесь межпроцессному взаимодействию (IPC), синхронизации потоков и рассмотрите разработку сетевых систем.
В него входит:
• 30 уроков
• 19 интерактивных задач
• 36 тестов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Знаете как можно почистить кэш браузера?
С помощью Clear Cache — расширение для Chrome, которое с лёгкостью позволяет отчистить кэш браузера.
Оно имеет гибкую настройку — можно указать, какие данные нужно удалять, а так же задать интервал автоматического удаления.
⬇️ Скачать расширение
📣 C++ Ready | #ресурс
С помощью Clear Cache — расширение для Chrome, которое с лёгкостью позволяет отчистить кэш браузера.
Оно имеет гибкую настройку — можно указать, какие данные нужно удалять, а так же задать интервал автоматического удаления.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍5😁2👎1
Знакомы с базовыми принципами работы с ассоциативными контейнерами?
#новичкам
Сегодня разберём один из самых полезных контейнеров в C++ — std::map. Это не просто "ассоциативный массив", а гибкая структура данных, которая автоматически упорядочивает элементы по ключам и позволяет эффективно работать с парами "ключ-значение".
Для начала создадим пустую структуру, например, для хранения возрастов:
После этого мы можем добавить элементы:
Элементы добавляются в виде пар: строка — это ключ, а число — значение. И чтобы получить значение по ключу
Но есть важный момент! Если ключа не существует,
А вот удаление элементов выполняется с помощью метода
Вот вам под конец полезный трюк: Можно легко обойти все элементы в
🔥 Но помните, что std::map не такой быстрый, как unordered_map, для операций поиска. Используйте его, если вам важна упорядоченность.
📣 C++ Ready | #практика
#новичкам
Сегодня разберём один из самых полезных контейнеров в C++ — std::map. Это не просто "ассоциативный массив", а гибкая структура данных, которая автоматически упорядочивает элементы по ключам и позволяет эффективно работать с парами "ключ-значение".
Для начала создадим пустую структуру, например, для хранения возрастов:
std::map<std::string, int> ages;
После этого мы можем добавить элементы:
ages["Alice"] = 25;
ages["Bob"] = 30;
Элементы добавляются в виде пар: строка — это ключ, а число — значение. И чтобы получить значение по ключу
int aliceAge = ages["Alice"]; // 25
Но есть важный момент! Если ключа не существует,
std::map
автоматически создаёт новый элемент с дефолтным значением (например, 0 для чисел). Чтобы избежать этого, используем метод find()
:if (ages.find("Charlie") != ages.end()) {
std::cout << "Charlie найден!\n";
} else {
std::cout << "Charlie отсутствует.\n";
}
А вот удаление элементов выполняется с помощью метода
erase()
:ages.erase("Alice"); // Удаляет элемент с ключом "Alice"
Вот вам под конец полезный трюк: Можно легко обойти все элементы в
std::map
с помощью цикла for
:for (const auto& [key, value] : ages) {
std::cout << key << ": " << value << '\n';
}
🔥 Но помните, что std::map не такой быстрый, как unordered_map, для операций поиска. Используйте его, если вам важна упорядоченность.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍5😁2