C/C++ Ready | Программирование
11.6K subscribers
696 photos
41 videos
334 links
Авторский канал по разработке на C и C++.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

Реклама на бирже: https://telega.in/c/cpp_ready
加入频道
😎 На Хабре нашлась интересная статья. В ней автор рассказывает как сделать полноценный 3D рендер в консоли.

В этой статье:
• Вы узнаете, как сделать 3D рендер прямо в консоли без каких-либо графических библиотек с помощью метода Raycast.

🔊Если заинтересовало, можешь продолжить читать на Habr!


📣 C++ Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18😁4👎1🔥1
👩‍💻 Работали уже с шаблонными функциями?

Они позволяют создавать функции, которые могут принимать параметры различных типов. При вызове функции компилятор генерирует конкретную версию функции для каждого типа.

Вот общий синтаксис для объявления шаблона функции:
template <typename T>
T functionName(T parameter1, T parameter2) {
// Тело функции
}


📣 C++ Ready | #гайд
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. Здесь важно предусмотреть базовый случай, который завершает рекурсию:
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);
}


🔥 Так что эти простые приёмы помогут вам избежать ошибок и написать более эффективный код. Удачи!

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍5
👩‍💻 Изучение ООП на C++

Объемный плейлист из 38 уроков, посвящённых программированию ООП языка C++. В курсе вы познакомитесь с классами, конструкторами и множеством методов.

Ссылочка на плейлист: YouTube 🖤


📣 C++ Ready | #курс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Bots Are Stupid — это головоломка, где вы пишете код, чтобы направить ботов через сложные платформенные уровни, решая задачи с точностью и логикой.

Ссылочка на игру: Steam 🙄


📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥6
👩‍💻 Многопоточное программирование на С++

Хороший бесплатный курс, в котором вы обучитесь межпроцессному взаимодействию (IPC), синхронизации потоков и рассмотрите разработку сетевых систем.

В него входит:
30 уроков
19 интерактивных задач
36 тестов


Пройти его можешь на Stepik

📣 C++ Ready | #курс
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 | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍5😁2👎1
Знакомы с базовыми принципами работы с ассоциативными контейнерами?
#новичкам

Сегодня разберём один из самых полезных контейнеров в 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, для операций поиска. Используйте его, если вам важна упорядоченность.

📣 C++ Ready | #практика
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 | #плагин
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 | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍6
👩‍💻 Знаете про два метода для операции с объектами?

Методы push_back и emplace_back используются для добавления элементов в конец вектора. Основное отличие между ними заключается в том, как создаются и добавляются элементы в контейнер:

push_back — добавляет копию переданного объекта в конец вектора, вызывая конструктор копирования. Это означает, что сначала создается копия объекта, а затем она добавляется в контейнер.

emplace_back — создает объект прямо в конце вектора, вызывая конструктор с необходимыми параметрами, и не требует предварительного создания объекта. Это позволяет избежать лишнего копирования и перемещения данных.

Таким образом, emplace может быть более производительным выбором, так как не требует дополнительного копирования объектов, в отличие от push.

🔥 — если узнал новое
🤝 если уже пользовался

📣 C++ Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30🤝9👍2
Знакомы с основными функциями работы с динамическими массивами?
#новичкам

Сегодня поговорим о функциях одного из самых универсальных контейнеров 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 также есть множество других полезных функций. Если хотите узнать о них подробнее, пишите в комментариях!

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥7
This media is not supported in your browser
VIEW IN TELEGRAM
Retrogadgets — игра, в которой вам предстоит собрать свой ретро-девайс, например, портативную игровую консоль или синтезатор, а потом запрограммировать его на языке Lua.

Ссылочка на игру: steampowered.com 🙄


📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥3
👩‍💻 Объемная шпаргалка по синтаксису С++ c примерами кода

Большая и полезная шпаргалка, в которой разобраны все темы и синтаксические особенности C++.


⬇️ Cкачать полную версию

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16🤝2👍1👎1