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
This media is not supported in your browser
VIEW IN TELEGRAM
Знали про этот плагин для VS Code? 😮
C++ Helper — расширение для Visual Studio Code, которое упрощает разработку на C++. Предоставляет авто дополнение для синтаксиса и методов, интеграцию с GDB для отладки с точками останова и пошаговым выполнением.
Также есть автоматическое форматирование кода и возможность генерировать шаблоны для часто используемых конструкций.
📣 C++ Ready | #плагин
C++ Helper — расширение для Visual Studio Code, которое упрощает разработку на C++. Предоставляет авто дополнение для синтаксиса и методов, интеграцию с GDB для отладки с точками останова и пошаговым выполнением.
Также есть автоматическое форматирование кода и возможность генерировать шаблоны для часто используемых конструкций.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥4
Please open Telegram to view this post
VIEW IN TELEGRAM
😁56👍9
This media is not supported in your browser
VIEW IN TELEGRAM
Каждый уже знает про metanit, но на всякий случай, покажу его незнайкам
Это такой сайт, на котором собрано большое количество полезных и базовых теоретических материалов для изучения программирования. Материалы есть почти по всем языкам и технологиям — от C++ до dart.
📌 Ссылочка: metanit.com
📣 C++ Ready | #ресурс
Это такой сайт, на котором собрано большое количество полезных и базовых теоретических материалов для изучения программирования. Материалы есть почти по всем языкам и технологиям — от C++ до dart.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍6
Методы
push_back
и emplace_back
используются для добавления элементов в конец вектора. Основное отличие между ними заключается в том, как создаются и добавляются элементы в контейнер:•
push_back
— добавляет копию переданного объекта в конец вектора, вызывая конструктор копирования. Это означает, что сначала создается копия объекта, а затем она добавляется в контейнер.•
emplace_back
— создает объект прямо в конце вектора, вызывая конструктор с необходимыми параметрами, и не требует предварительного создания объекта. Это позволяет избежать лишнего копирования и перемещения данных.Таким образом,
emplace
может быть более производительным выбором, так как не требует дополнительного копирования объектов, в отличие от push
.🔥 — если узнал новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30🤝9👍2
Знакомы с основными функциями работы с динамическими массивами?
#новичкам
Сегодня поговорим о функциях одного из самых универсальных контейнеров vector.
Функции добавления и удаления элементов с конца массива. Каждый вызов
А получить доступ к элементам можно так же, как в обычном массиве:
Вставить же элемент в произвольное место по итератору можно с помощью
Теперь про удаление, удалить элемент из любого места по итератору можно при помощи
Для изменения размера вектора используются функции
🔥 У vector также есть множество других полезных функций. Если хотите узнать о них подробнее, пишите в комментариях!
📣 C++ Ready | #практика
#новичкам
Сегодня поговорим о функциях одного из самых универсальных контейнеров vector.
std::vector
— это массив, который автоматически управляет своей памятью, изменяя размер по мере необходимости:std::vector<int> vec = {10, 20, 30};
Функции добавления и удаления элементов с конца массива. Каждый вызов
push_back
добавляет новый элемент, автоматически увеличивая размер вектора, а pop_back
делает обратное.vec.push_back(40); // Добавляет 40 в конец
vec.pop_back(); // Удаляет 40 из конца
А получить доступ к элементам можно так же, как в обычном массиве:
int first = vec[0]; // 10
int last = vec.back(); // 30
Вставить же элемент в произвольное место по итератору можно с помощью
insert
:vec.insert(vec.begin() + 1, 15); // Вставит 15 на вторую позицию
Теперь про удаление, удалить элемент из любого места по итератору можно при помощи
erase
:vec.erase(vec.begin()); // Удаляет первый элемент
Для изменения размера вектора используются функции
resize
:vec.resize(2); // Устанавливает размер равным 2, все лишние элементы удаляются
vec.resize(5, 123); // Устанавливает размер равным 5, недостающие элементы заполняются значением 123
🔥 У vector также есть множество других полезных функций. Если хотите узнать о них подробнее, пишите в комментариях!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥7