Библиотека C/C++ разработчика
6.79K subscribers
651 photos
689 videos
8 files
937 links
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
Download Telegram
Практика языка C, 2023-2024

Семинар 1.1. Алгоритм Евклида.
Семинар 1.2. Системы счисления.
Семинар 1.3. Числа Фибоначчи.
Допсеминар: unix shell
Семинар 2.1. Простые числа.
Семинар 2.2. Побитовые вычисления.
Семинар 2.3. Время и случайность.
Углубление пройденного: логическая память и виртуальная память.
Семинар 3.1. Линейный поиск и простые сортировки.
Семинар 3.2. Стратегия "разделяй и властвуй".

источник

#cpp #programming

👉 @cpp_lib
#вакансия #удалённо #parttime #remote #parttime #C++ #преподаватель

🦉  OTUS ищет преподавателей на онлайн-курсы:
С++ Developer Basic
С++ Developer Professional

Мы расширяем команду экспертов (уже более 600 человек). Преподавательский опыт не обязателен — мы научим вас всему, что нужно!

Требуется:
- Знание С++17, STL, ООП, Git, опыт коммерческой разработки на C++ от 3 лет, понимание RAII, SOLID, SFINAE. Опыт многопоточного и асинхронного программирования.

Обязанности:
- подготовиться к занятиям (темы на выбор, материалы предоставляются)
- преподавать в mts-link.ru, уделяя большое внимание практике. Здесь вы сможете развивать навыки публичных выступлений, работы с аудиторией и подачи обратной связи.

Условия:
гибкий график, легко совмещать с основной работой, занятия в вечернее время;
  оплата от 4000 до 6000 руб. за 1,5 часа занятия;
бонусы: доступ к нашим курсам, нетворкинг, развитие личного бренда, бесплатные воркшопы и конференции для наших преподавателей.

Обсудить подробнее: @candyfox24
Крошечный рендерер или как работает OpenGL: программный рендеринг в 500 строках кода

https://github.com/ssloy/tinyrenderer/wiki

#cpp #programming

👉 @cpp_lib
Подборка Telegram каналов для программистов

Системное администрирование 📌
https://t.me/sysadmin_girl Девочка Сисадмин
https://t.me/srv_admin_linux Админские угодья
https://t.me/linux_srv Типичный Сисадмин

https://t.me/linux_odmin Linux: Системный администратор
https://t.me/devops_star DevOps Star (Звезда Девопса)
https://t.me/i_linux Системный администратор
https://t.me/linuxchmod Linux
https://t.me/sys_adminos Системный Администратор
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux

1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python Rus

Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах

GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
https://t.me/game_devv Все о разработке игр

Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Книги для программистов

БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning

Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT
https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста

QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика

Шутки программистов 📌
https://t.me/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_1 Статьи из "Хакера"

Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров

Английский 📌
https://t.me/UchuEnglish Английский с нуля

Математика 📌
https://t.me/Pomatematike Канал по математике
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике

Excel лайфхак📌
https://t.me/Excel_lifehack

https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)

Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
This media is not supported in your browser
VIEW IN TELEGRAM
🚀В этой статье рассматривается минималистичная реализация виртуальной машины (VM) на C, занимающая менее 125 строк кода! 🖥️

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

🔹 Основные компоненты:
- Регистры (массив для хранения значений)
- Память (байтовый массив, хранящий инструкции и данные)
- Исполнительный цикл (разбор и выполнение инструкций)

🔹 Пример кода:
Основная идея заключается в том, чтобы хранить наши инструкции в массиве (uint16_t program[]), а затем использовать функцию fwrite() для создания бинарного файла, который мы в дальнейшем сможем загрузить с помощью ld_img().


#include <stdio.h>
#include <stdlib.h>

uint16_t program[] = {
/*mem[0x3000]=*/ 0xF026, // 1111 0000 0010 0110 TRAP trp_in_u16 ;read an uint16_t from stdin and put it in R0
/*mem[0x3002]=*/ 0x1220, // 0001 0010 0010 0000 ADD R1,R0,x0 ;add contents of R0 to R1
/*mem[0x3003]=*/ 0xF026, // 1111 0000 0010 0110 TRAP trp_in_u16 ;read an uint16_t from stdin and put it in R0
/*mem[0x3004]=*/ 0x1240, // 0001 0010 0010 0000 ADD R1,R1,R0 ;add contents of R0 to R1
/*mem[0x3006]=*/ 0x1060, // 0001 0000 0110 0000 ADD R0,R1,x0 ;add contents of R1 to R0
/*mem[0x3007]=*/ 0xF027, // 1111 0000 0010 0111 TRAP trp_out_u16;show the contents of R0 to stdout
/*mem[0x3006]=*/ 0xF025, // 1111 0000 0010 0101 HALT ;halt
};

int main(int argc, char** argv) {
char *outf = "sum.obj";
FILE *f = fopen(outf, "wb");
if (NULL==f) {
fprintf(stderr, "Cannot write to file %s\n", outf);
}
size_t writ = fwrite(program, sizeof(uint16_t), sizeof(program), f);
fprintf(stdout, "Written size_t=%lu to file %s\n", writ, outf);
fclose(f);
return 0;
}



https://www.andreinc.net/2021/12/01/writing-a-simple-vm-in-less-than-125-lines-of-c

#cpp #programming

👉 @cpp_lib
Оптимизация кода с помощью std::string_view

Привет, друзья! Сегодня разберём полезную штуку для работы со строками — std::string_view. Если ваш код активно использует std::string, но вам нужно просто просматривать данные без ненужных аллокаций и копирований, то std::string_view — это то, что нужно!

Пример проблемы:

std::string extract_extension(const std::string& filename) {
size_t pos = filename.rfind('.');
if (pos == std::string::npos) return "";
return filename.substr(pos);
}

Казалось бы, код работает, но есть нюанс: substr(pos) создаёт новую строку, что лишний раз тратит память.

Оптимизированный вариант:

std::string_view extract_extension(std::string_view filename) {
size_t pos = filename.rfind('.');
if (pos == std::string_view::npos) return {};
return filename.substr(pos);
}

Здесь std::string_view просто создаёт представление на часть строки без копирования данных.

🔥 Итог: код стал быстрее и экономичнее! Используйте std::string_view, когда вам не нужно владение строкой.

Что думаете? Используете std::string_view в своём коде? Делитесь в комментариях! 🔥

#cpp #programming

👉 @cpp_lib
🎯 Ошибки в коде на C++ — враг номер один? Мы научим их побеждать!

Приходите на открытый урок «Отладка в C++: место в жизненном цикле разработки». Разберём работу с GDB, поиск утечек памяти, неопределённое поведение и многое другое.

Хотите писать код, который работает без сюрпризов? Мы покажем, как использовать отладку, чтобы ошибки боялись вас.

🗓 Урок пройдёт 12 февраля в 20:00 мск.

👉 Регистрируйтесь сейчас и получите скидку на большое обучение на курсе «C++ Developer. Professional»: https://vk.cc/cIfoXL

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Constexpr — компилируем код на этапе сборки

Сегодня хотел еще поговорть про constexpr и как он помогает делать код быстрее за счёт вычислений на этапе компиляции.

Что делает constexpr?
Если функция объявлена с constexpr, то компилятор попытается выполнить её во время компиляции, если это возможно.

Простой пример:

constexpr int square(int x) {
return x * x;
}

Теперь, если мы напишем:

int val = square(5);

То компилятор подставит 25 прямо в код, и вычисление не будет выполняться во время выполнения программы!

Более сложный пример:
Представьте, что у нас есть факториал:

constexpr int factorial(int n) {
return (n <= 1) ? 1 : (n * factorial(n - 1));
}

Теперь вызов factorial(5) будет заменён на 120 ещё до запуска программы.

📌 Итог: constexpr помогает убирать лишние вычисления из рантайма, делая код быстрее.

А вы используете constexpr? Делитесь своими кейсами! 🚀

#cpp #programming

👉 @cpp_lib
🔥 Почему в C++ стоит использовать std::vector, а не new[]?

Раньше динамические массивы создавали так:

int* arr = new int[100];
delete[] arr;

Но это опасно! Почему?

📌 Минусы new[] и delete[]:
Нужно вручную управлять памятью.
Легко забыть delete[], вызвав утечки.
Нет удобных методов работы с массивом.

📌 Преимущества std::vector:
Автоматически управляет памятью.
Имеет удобные методы (`push_back`, size, `resize`).
Совместим с алгоритмами STL.

Вот как лучше:

std::vector<int> arr(100);

А вы уже перешли на std::vector?

#cpp #programming

👉 @cpp_lib