C/C++ Development | YeaHub – Telegram
C/C++ Development | YeaHub
825 subscribers
228 photos
56 videos
1 file
380 links
Теория, подготовка к интервью и курсы для C/C++ разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#полезное
🫠 Это официальная документация по препроцессору C++ в GNU Compiler Collection (GCC)

Препроцессор C++ выполняет начальную обработку исходного кода перед компиляцией, обрабатывая директивы, такие как #define, #include, #if, #pragma и другие.

🟠Основы работы препроцессора
🟠Макросы
🟠Условную компиляцию
🟠Встроенные директивы GCC
Ознакомиться

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
#полезное
🥺 std::ranges::views
::filter


std::ranges::views::filter (C++20) позволяет удобно фильтровать элементы в диапазоне без создания временных контейнеров. Это делает код более выразительным и эффективным.
Документация

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5🥰21
#Собес
🤔 Когда используется ключевое слово "void" в Функции?

Ключевое слово void используется в языке С для обозначения того, что функция не возвращает значения. Оно ставится в заголовке функции, если не предполагается возвращать никакие данные.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
3🤡1
#ЛитКод
Задача: 364. Nested List Weight Sum II

Вам дан вложенный список целых чисел nestedList. Каждый элемент является либо целым числом, либо списком, элементы которого также могут быть целыми числами или другими списками.

Глубина целого числа — это количество списков, внутри которых оно находится. Например, вложенный список [1,[2,2],[[3],2],1] имеет значение каждого целого числа, установленное равным его глубине. Пусть maxDepth будет максимальной глубиной любого целого числа.
Вес целого числа определяется как maxDepth - (глубина целого числа) + 1.

Верните сумму каждого целого числа в nestedList, умноженную на его вес.

Пример:
Input: nestedList = [[1,1],2,[1,1]]
Output: 8
Explanation: Four 1's with a weight of 1, one 2 with a weight of 2.
1*1 + 1*1 + 2*2 + 1*1 + 1*1 = 8


👨‍💻 Алгоритм:

1⃣Инициализировать первый уровень BFS-дерева, добавив все элементы из входного nestedList в очередь.

2⃣Для каждого уровня извлекать передний элемент из очереди. Если это список, то добавить его элементы в очередь. В противном случае обновить значения sumOfElements, maxDepth и sumOfProducts.

3⃣Когда очередь станет пустой, вернуть значение (maxDepth + 1) * sumOfElements - sumOfProducts.

😎 Решение:
#include <vector>
#include <queue>
using namespace std;

class NestedInteger {
public:
bool isInteger() const;
int getInteger() const;
const vector<NestedInteger> &getList() const;
};

class Solution {
public:
int depthSumInverse(vector<NestedInteger>& nestedList) {
queue<NestedInteger> q;
for (auto& ni : nestedList) q.push(ni);

int depth = 1, maxDepth = 0, sumOfElements = 0, sumOfProducts = 0;

while (!q.empty()) {
int size = q.size();
maxDepth = max(maxDepth, depth);

for (int i = 0; i < size; ++i) {
NestedInteger nested = q.front();
q.pop();

if (nested.isInteger()) {
int value = nested.getInteger();
sumOfElements += value;
sumOfProducts += value * depth;
} else {
for (auto& ni : nested.getList()) q.push(ni);
}
}
depth++;
}
return (maxDepth + 1) * sumOfElements - sumOfProducts;
}
};


👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
🤬 Чувак критикует инструменты сборки (build tools) для C/C++.

Он говорит, что C и C++ — это мощные языки, но несмотря на это, разработчики не могут эффективно использовать их для организации процесса сборки. Вместо этого они часто прибегают к Python (который он называет "интерпретируемым игрушечным языком"), что, только усложняет процесс.

Проще говоря, для сборки проектов на C/C++ приходится использовать внешние инструменты и скрипты, вместо того чтобы решать эти задачи средствами самих языков.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#видео
🤓 Закон Линуса о написании читаемого кода

Видео объясняет лучшие практики написания читаемого кода: предпочтение 8-символьным отступам, избегание излишней вложенности, правильное разбиение длинных строк (особенно логов), соотношение длины функции к её сложности и необходимость писать код, понятный без комментариев, вместо объяснения его работы в них.
📱 Смотреть видео

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#Собес
🤔 Что такое динамическая структура данных?

Динамическая структура данных изменяет свой размер во время работы программы, что позволяет эффективно использовать память. В отличие от статических структур данных, динамические могут расти или уменьшаться по мере необходимости.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
#полезное
😎 Олды здесь

Allegro –- олдскульная библиотека для C++ (с 1990-х), чтобы писать простые 2D-игры: аркады, платформеры. Всё вручную — графика, звук, ввод.

Она облегчает работу с графикой, звуком, вводом и таймингами, предоставляя кроссплатформенный API.

Сейчас её редко используют в крупных проектах, так как есть более современные движки вроде SDL, SFML, Godot, Unity

Но она до сих пор жива — https://liballeg.org/index.html

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👍 SGCL — это библиотека управления памятью для C++

Разработанная для обеспечения безопасного и эффективного управления памятью без накладных расходов, обычно связанных с методами сборки мусора.

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

🟠Поддержка циклов владения
🟠SGCL разработан с учетом стандартов C++17 и выше, обеспечивая совместимость с современными практиками программирования.
🟠Простота использования
Ознакомиться

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
😱 Кажется, дебаг займет очень много времени...

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
6
#Собес
🤔 Что такое стек (stack) в С?

Стек - это структура данных, работающая по принципу LIFO (Last In, First Out), что означает, что последний добавленный элемент удаляется первым. Доступ к
элементам возможен только с вершины стека. Основные операции:
push ( ) - добавление элемента в стек.
pop ( ) - удаление элемента из стека.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
🤔 Что каждый разработчик должен знать о вычислениях на GPU

Статья предоставляет введение в архитектуру и вычислительные возможности графических процессоров (GPU). Автор отмечает, что, в отличие от центральных процессоров (CPU), которые оптимизированы для последовательного выполнения команд с низкой задержкой, GPU разработаны для массового параллелизма и высокой пропускной способности, что делает их особенно эффективными для задач, требующих одновременной обработки большого объема данных, таких как графика, численные вычисления и глубокое обучение.
Ознакомиться

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
2
#ЛитКод
Задача: 711. Number of Distinct Islands II

Вам дана двоичная матричная сетка m x n. Остров - это группа 1 (представляющая сушу), соединенных в четырех направлениях (горизонтальном или вертикальном). Можно предположить, что все четыре края сетки окружены водой. Остров считается одинаковым с другим, если они имеют одинаковую форму, или имеют одинаковую форму после поворота (только на 90, 180 или 270 градусов) или отражения (влево/вправо или вверх/вниз). Верните количество разных островов.

Пример:
Input: grid = [[1,1,0,0,0],[1,0,0,0,0],[0,0,0,0,1],[0,0,0,1,1]]
Output: 1


👨‍💻 Алгоритм:

1⃣Пройдите по каждому элементу матрицы, если найдена земля (1), выполните DFS для обнаружения всех связанных с этим островом земель и сохраните форму острова.

2⃣Нормализуйте форму острова, применив все возможные повороты и отражения, чтобы найти каноническую форму.

3⃣Используйте множество для хранения всех уникальных канонических форм и верните размер этого множества.

😎 Решение:
class Solution {
public:
int numDistinctIslands2(vector<vector<int>>& grid) {
unordered_set<string> uniqueIslands;

for (int i = 0; i < grid.size(); ++i) {
for (int j = 0; j < grid[0].size(); ++j) {
if (grid[i][j] == 1) {
vector<pair<int, int>> shape;
dfs(grid, i, j, i, j, shape);
uniqueIslands.insert(normalize(shape));
}
}
}

return uniqueIslands.size();
}

private:
void dfs(vector<vector<int>>& grid, int i, int j, int baseI, int baseJ, vector<pair<int, int>>& shape) {
if (i < 0 || i >= grid.size() || j < 0од

Задача
: 
711. Number ofgrid[i][j]
 == 0) {
return;
}
grid[i][j] = 0;
shape.emplace_back(i - baseI, j - baseJ);
dfs(grid, i + 1, j, baseI, baseJ, shape);
dfs(grid, i - 1, j, baseI, baseJ, shape);
dfs(grid, i, j + 1, baseI, baseJ, shape);
dfs(grid, i, j - 1, baseI, baseJ, shape);
}

string normalize(vector<pair<int, int>>& shape) {
vector<vector<pair<int, int>>> shapes(8);
for (auto& p : shape) {
int x = p.first, y = p.second;
shapes[0].emplace_back(x, y);
shapes[1].emplace_back(x, -y);
shapes[2].emplace_back(-x, y);
shapes[3].emplace_back(-x, -y);
shapes[4].emplace_back(y, x);
shapes[5].emplace_back(y, -x);
shapes[6].emplace_back(-y, x);
shapes[7].emplace_back(-y, -x);
}
for (auto& s : shapes) {
sort(s.begin(), s.end());
}
string minShape = to_string(shapes[0][0].first) + "," + to_string(shapes[0][0].second);
for (auto& s : shapes) {
string sStr;
for (auto& p : s) {
sStr += to_string(p.first) + "," + to_string(p.second) + ";";
}
minShape = min(minShape, sStr);
}
return minShape;
}
};


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
#полезное
🤓 Всё понятным языком

Нашел неплохой ресурс для изучения основных концепций машинного обучения с помощью интерактивных визуализаций

Он включает интерактивные статьи по нейронным сетям, линейная регрессия, обучение с подкреплением и деревья решений, делая сложные идеи более доступными и понятными.
Смотри тут

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#Собес
🤔 Что такое цикл (lоор) в С?

Цикл в С - это конструкция, позволяющая повторять выполнение кода, пока выполняется заданное условие. В С есть три основных типа циклов:
for - используется, когда известно количество итераций.
while - выполняется, пока условие истинно.
do while - выполняется хотя бы один раз, затем проверяет условие.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#новости
😬 Создатель C++ бьет тревогу из-за "серьезных атак" на язык программирования.

Бьярне Страуструп, создатель C++, обратился к сообществу с призывом защитить язык, который в последние годы подвергается критике со стороны кибербезопасности и технических экспертов из-за проблем с ручным управлением памяти. C и C++ полагаются на него, что приводит к ошибкам выхода за пределы чтения и записи, которые, в свою очередь становятся источником для уязвимостей и составляют большинство проблем в крупных проектах.

Страуструп признает, что C++ нуждается в срочных мерах для улучшения безопасности, особенно в свете рекомендаций правительственных агентств, которые рекомендуют отказаться от использования "небезопасных" языков к 2026 году. Он предлагает использовать фреймворк "Profiles", который может помочь в решении этих проблем, но скептики считают, что это решение не будет готово вовремя.
theregister.com

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
🤯 Рендерер VoxelSpace на старом Atari ST с 1 МБ памяти и процессором на 8 МГц, поддерживающем всего 16 цветов достиг впечатляющих результатов по оптимизации.

Разработчики потратили много времени на оптимизацию, используя C и встроенный m68k-ассемблер.

Недавно получилось уменьшить использование CRT, благодаря чему исполняемый файл стал всего 13430 байт, освободив почти 200 КБ оперативной памяти. ☕️

Это улучшение значительно оптимизирует работу программы, позволяя использовать больше ресурсов системы для других задач.

Исходный код и двоичные файлы доступны на Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
🤔 MBASE

Это высокоуровневая неблокирующая библиотека для вывода больших языковых моделей, разработанная на основе проекта llama.cpp!

✔️ Ее цель — предоставить разработчикам инструменты и API для интеграции популярных LLM в свои приложения с минимальными потерями производительности и затратами на разработку. Библиотека поддерживает неблокирующий ввод-вывод, что позволяет эффективно обрабатывать запросы без задержек, связанных с ожиданием завершения операций. Это особенно полезно при создании приложений, требующих высокой отзывчивости и способности обрабатывать несколько запросов одновременно. MBASE предоставляет гибкие и настраиваемые интерфейсы, упрощающие процесс интеграции LLM в различные проекты, будь то чат-боты, системы рекомендаций или другие приложения, использующие возможности современных языковых моделей.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#Собес
🤔 Что такое EOF (end of file) в С?

EOF (End Of File) в С указывает на конец файла при чтении данных. При достижении конца файла стандартные функции, такие как fgetc(), fscanf() , fgets() , возвращают EOF .

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
😊 CUTLASS (CUDA Templates for Linear Algebra Subroutines)

Это коллекция C++ шаблонов, разработанная NVIDIA для реализации высокопроизводительных операций умножения матриц (GEMM) и связанных с ними вычислений на GPU с использованием CUDA!

🚩 Библиотека предоставляет модульные и повторно используемые компоненты, которые упрощают разработку пользовательских ядер и приложений, оптимизированных для современных архитектур NVIDIA, включая Volta, Turing, Ampere, Ada, Hopper и Blackwell.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1