Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN 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
Семинар 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
🦉 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
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
Системное администрирование 📌
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
Telegram
Девочка Сисадмин
Канал по системному администрированию, который ведет девочка админ. Все о Linux, Windows и т.д.
По всем вопросам : @Sofiia_artamonova
По всем вопросам : @Sofiia_artamonova
This media is not supported in your browser
VIEW IN TELEGRAM
🚀В этой статье рассматривается минималистичная реализация виртуальной машины (VM) на C, занимающая менее 125 строк кода! 🖥️
Основная идея — эмуляция простого процессора с регистровой архитектурой. Виртуальная машина поддерживает базовые операции, такие как загрузка значений в регистры, сложение, умножение и выполнение условных переходов.
🔹 Основные компоненты:
- Регистры (массив для хранения значений)
- Память (байтовый массив, хранящий инструкции и данные)
- Исполнительный цикл (разбор и выполнение инструкций)
🔹 Пример кода:
Основная идея заключается в том, чтобы хранить наши инструкции в массиве (
https://www.andreinc.net/2021/12/01/writing-a-simple-vm-in-less-than-125-lines-of-c
#cpp #programming
👉 @cpp_lib
Основная идея — эмуляция простого процессора с регистровой архитектурой. Виртуальная машина поддерживает базовые операции, такие как загрузка значений в регистры, сложение, умножение и выполнение условных переходов.
🔹 Основные компоненты:
- Регистры (массив для хранения значений)
- Память (байтовый массив, хранящий инструкции и данные)
- Исполнительный цикл (разбор и выполнение инструкций)
🔹 Пример кода:
Основная идея заключается в том, чтобы хранить наши инструкции в массиве (
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
Оптимизация кода с помощью
Привет, друзья! Сегодня разберём полезную штуку для работы со строками —
Пример проблемы:
Казалось бы, код работает, но есть нюанс:
Оптимизированный вариант:
Здесь
🔥 Итог: код стал быстрее и экономичнее! Используйте
Что думаете? Используете
#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
Приходите на открытый урок «Отладка в C++: место в жизненном цикле разработки». Разберём работу с GDB, поиск утечек памяти, неопределённое поведение и многое другое.
Хотите писать код, который работает без сюрпризов? Мы покажем, как использовать отладку, чтобы ошибки боялись вас.
🗓 Урок пройдёт 12 февраля в 20:00 мск.
Реклама. ООО «Отус онлайн-образование», ОГРН 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++ стоит использовать
Раньше динамические массивы создавали так:
Но это опасно! Почему?
📌 Минусы
❌ Нужно вручную управлять памятью.
❌ Легко забыть
❌ Нет удобных методов работы с массивом.
📌 Преимущества
✅ Автоматически управляет памятью.
✅ Имеет удобные методы (`push_back`,
✅ Совместим с алгоритмами STL.
Вот как лучше:
А вы уже перешли на
#cpp #programming
👉 @cpp_lib
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
⚡ Как избежать утечек памяти в C?
В C нет
📌 Основные правила:
1️⃣ Всегда проверяйте
2️⃣ Освобождайте память
3️⃣ Используйте инструменты типа Valgrind для проверки утечек.
Какой ваш любимый инструмент для поиска утечек памяти?
#cpp #programming
👉 @cpp_lib
В C нет
std::vector
, а значит, памятью нужно управлять вручную. Как не допустить утечек?📌 Основные правила:
1️⃣ Всегда проверяйте
malloc
:
int* ptr = malloc(10 * sizeof(int));
if (!ptr) { perror("malloc failed"); exit(1); }
2️⃣ Освобождайте память
free()
, когда она больше не нужна. 3️⃣ Используйте инструменты типа Valgrind для проверки утечек.
Какой ваш любимый инструмент для поиска утечек памяти?
#cpp #programming
👉 @cpp_lib
Media is too big
VIEW IN TELEGRAM
Парсим С++
В этом вебинаре мы обсудили грамматические конструкции в С++ и как они работают. Мы поговорили о разных видах парсеров и о том, почему С++ сложно парсить. Мы также поделились некоторыми хитростями, позволяющими избежать чрезмерного замедления.
источник
#cpp #programming
👉 @cpp_lib
В этом вебинаре мы обсудили грамматические конструкции в С++ и как они работают. Мы поговорили о разных видах парсеров и о том, почему С++ сложно парсить. Мы также поделились некоторыми хитростями, позволяющими избежать чрезмерного замедления.
источник
#cpp #programming
👉 @cpp_lib
🔥 C++: умные указатели – избавляемся от
Вы все еще вручную освобождаете память? Это уже не актуально! Разбираем умные указатели (
🔹 std::unique_ptr – для объектов, у которых один владелец. Память освобождается автоматически, когда указатель выходит из области видимости:
🔹 std::shared_ptr – для объектов, у которых несколько владельцев. Когда последний
❌ Забудьте про
А вы уже полностью отказались от
#cpp #programming
👉 @cpp_lib
delete
навсегда! Вы все еще вручную освобождаете память? Это уже не актуально! Разбираем умные указатели (
std::unique_ptr
, std::shared_ptr
) и их преимущества. 🔹 std::unique_ptr – для объектов, у которых один владелец. Память освобождается автоматически, когда указатель выходит из области видимости:
#include <memory>
#include <iostream>
int main() {
std::unique_ptr<int> ptr = std::make_unique<int>(42);
std::cout << *ptr << std::endl; // 42
}
🔹 std::shared_ptr – для объектов, у которых несколько владельцев. Когда последний
shared_ptr
уничтожается – объект тоже удаляется:
#include <memory>
#include <iostream>
int main() {
std::shared_ptr<int> sp1 = std::make_shared<int>(42);
std::shared_ptr<int> sp2 = sp1; // Теперь два владельца
std::cout << *sp1 << " " << *sp2 << std::endl; // 42 42
}
❌ Забудьте про
new
и delete
, используйте std::make_unique
и std::make_shared
. Это избавит вас от утечек памяти. А вы уже полностью отказались от
delete
? Пишите в комментариях! 👇 #cpp #programming
👉 @cpp_lib
Simple Term Colors
Библиотека C++17 для работы с цветами в терминале. С поддержкой RGB и HSL!
https://github.com/illyigan/simple_term_colors
#cpp #programming
👉 @cpp_lib
Библиотека C++17 для работы с цветами в терминале. С поддержкой RGB и HSL!
https://github.com/illyigan/simple_term_colors
#cpp #programming
👉 @cpp_lib
Многопоточное программирование на C
Многопоточное программирование — это специализированная форма параллельного программирования, которая предполагает выполнение нескольких потоков в рамках одного процесса или приложения. Объясню - каждая система состоит из процессов, а процесс состоит из потоков. Потоков может быть как несколько так и один. То есть один процесс выполняет несколько действий одновременно. Многопоток нужен в основном для оптимизации использования ресурсов, для программирования интерфейсов - как упомянул раннее выполнение нескольких действийй одновременно. Многопоточность незаменима тогда, когда необходимо, чтобы графический интерфейс продолжал отзываться на действия пользователя во время выполнения некоторой обработки информации. Не будем тянуть, а перейдем к делу.
Тут я написал небольшое приложение которое создает поток и выводит с его помощью числа от одного до 10 с небольшой задержкой.
https://habr.com/ru/articles/881444/
#cpp #programming
👉 @cpp_lib
Многопоточное программирование — это специализированная форма параллельного программирования, которая предполагает выполнение нескольких потоков в рамках одного процесса или приложения. Объясню - каждая система состоит из процессов, а процесс состоит из потоков. Потоков может быть как несколько так и один. То есть один процесс выполняет несколько действий одновременно. Многопоток нужен в основном для оптимизации использования ресурсов, для программирования интерфейсов - как упомянул раннее выполнение нескольких действийй одновременно. Многопоточность незаменима тогда, когда необходимо, чтобы графический интерфейс продолжал отзываться на действия пользователя во время выполнения некоторой обработки информации. Не будем тянуть, а перейдем к делу.
Тут я написал небольшое приложение которое создает поток и выводит с его помощью числа от одного до 10 с небольшой задержкой.
#include <gtk-4.0/gtk/gtk.h>
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
static void *thread_function(void *data) {
for (int i = 1; i <= 10; i++) {
printf("Thread: %d\n", i);
sleep(1);
}
return NULL;
}
static void on_button_clicked(GtkWidget *widget, gpointer data) {
pthread_t thread;
if (pthread_create(&thread, NULL, thread_function, NULL) != 0) {
g_print("Ошибка создания потока\n");
}
pthread_detach(thread);
}
int main(int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *button;
gtk_init(&argc, &argv);
window = gtk_window_new();
gtk_window_set_title(GTK_WINDOW(window), "Многопоточная программа");
gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
button = gtk_button_new_with_label("Запустить поток");
g_signal_connect(button, "clicked", G_CALLBACK(on_button_clicked), NULL);
gtk_window_set_child(GTK_WINDOW(window), button);
gtk_widget_show(window);
gtk_main();
return 0;
}
//gcc threading.c -o thread_gui.o -lpthread Надо было добавить чтобы выводило и номер потока но что-то до меня не много не дошлоНадо было добавить чтобы выводило и номер потока но что-то до меня не много не дошло
https://habr.com/ru/articles/881444/
#cpp #programming
👉 @cpp_lib
Грязные трюки C++ из userver и Boost
Привет, я Антон Полухин из Техплатформы Екома и Райдтеха Яндекса. Моя команда разрабатывает userver — современный опенсорсный асинхронный фреймворк с богатым набором абстракций для быстрого и комфортного создания микросервисов, сервисов и утилит на C++.
Когда мы пишем какой‑то код для userver и для таких сложных проектов, как Boost, периодически мы сталкиваемся с нестандартными проблемами. И эти нестандартные проблемы требуют нестандартных решений. Вот о таких решениях мы сегодня и поговорим.
А именно:
- Посмотрим, как работают исключения на платформе Linux x86, и сделаем с ними что‑то интересное.
- Залезем ещё глубже под капот исключений и сделаем их ещё быстрее.
- Сделаем висячую ссылку на невалидный объект, и всё будет хорошо.
- А под конец то, что все любим, — погрузимся в шаблонное метапрограммирование.
https://habr.com/ru/companies/yandex/articles/852244
#cpp #programming
👉 @cpp_lib
Привет, я Антон Полухин из Техплатформы Екома и Райдтеха Яндекса. Моя команда разрабатывает userver — современный опенсорсный асинхронный фреймворк с богатым набором абстракций для быстрого и комфортного создания микросервисов, сервисов и утилит на C++.
Когда мы пишем какой‑то код для userver и для таких сложных проектов, как Boost, периодически мы сталкиваемся с нестандартными проблемами. И эти нестандартные проблемы требуют нестандартных решений. Вот о таких решениях мы сегодня и поговорим.
А именно:
- Посмотрим, как работают исключения на платформе Linux x86, и сделаем с ними что‑то интересное.
- Залезем ещё глубже под капот исключений и сделаем их ещё быстрее.
- Сделаем висячую ссылку на невалидный объект, и всё будет хорошо.
- А под конец то, что все любим, — погрузимся в шаблонное метапрограммирование.
https://habr.com/ru/companies/yandex/articles/852244
#cpp #programming
👉 @cpp_lib
⚡️Кросс-платформа — твой новый шаг в развитии iOS!
Ты знаешь, как делать приложения для iOS. А теперь представь, что один и тот же код может работать и на iOS, и на Android. Пора узнать, как реализовать это с помощью KMP?
На открытом вебинаре 19 февраля в 20:00 мск ты узнаешь:
- Что такое кросс-платформенная разработка и почему она — будущее;
- Как сделать iOS-приложение мультиплатформенным;
- Как использовать актуальные инструменты Compose Multiplatform.
Зарегистрируйся на открытый урок в преддверие старта курса «iOS Developer»! Все участники получат скидку на обучение. Встречаемся 19 февраля в 20:00 мск.
👉Регистрируйтесь: https://vk.cc/cIGAjd
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Ты знаешь, как делать приложения для iOS. А теперь представь, что один и тот же код может работать и на iOS, и на Android. Пора узнать, как реализовать это с помощью KMP?
На открытом вебинаре 19 февраля в 20:00 мск ты узнаешь:
- Что такое кросс-платформенная разработка и почему она — будущее;
- Как сделать iOS-приложение мультиплатформенным;
- Как использовать актуальные инструменты Compose Multiplatform.
Зарегистрируйся на открытый урок в преддверие старта курса «iOS Developer»! Все участники получат скидку на обучение. Встречаемся 19 февраля в 20:00 мск.
👉Регистрируйтесь: https://vk.cc/cIGAjd
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔥 Как правильно сравнивать
Доброй ночи! Давайте разберём важную тему – сравнение
✅ Способы сравнения строк
1️⃣ Оператор
Если вам нужно проверить точное совпадение строк:
Этот метод безопасен, читабелен и работает быстро.
2️⃣ Функция
Если нужно получить порядок строк в алфавитном сравнении:
🔹
-
-
-
3️⃣ Сравнение без учета регистра
В C++ нет встроенного метода, но можно использовать
4️⃣ Сравнение подстрок
Если нужно проверить, начинается ли строка с подстроки:
✅
🚀 Итоги
✔ Используйте
✔
✔ Для регистра –
✔ Для подстрок –
Какой метод вы чаще используете? Делитесь в комментариях!
#cpp #programming
👉 @cpp_lib
std::string
в C++? Доброй ночи! Давайте разберём важную тему – сравнение
std::string
в C++. Многие думают, что это просто (==
и всё), но есть нюансы! Давайте разберёмся. ✅ Способы сравнения строк
1️⃣ Оператор
==
Если вам нужно проверить точное совпадение строк:
std::string str1 = "hello";
std::string str2 = "hello";
if (str1 == str2) {
std::cout << "Строки равны!\n";
}
Этот метод безопасен, читабелен и работает быстро.
2️⃣ Функция
compare()
Если нужно получить порядок строк в алфавитном сравнении:
std::string str1 = "apple";
std::string str2 = "banana";
if (str1.compare(str2) < 0) {
std::cout << "apple идет перед banana\n";
}
🔹
compare()
возвращает: -
0
, если строки равны -
< 0
, если str1
меньше str2
-
> 0
, если str1
больше str2
3️⃣ Сравнение без учета регистра
В C++ нет встроенного метода, но можно использовать
std::transform
:
#include <algorithm>
#include <cctype>
#include <string>
bool caseInsensitiveCompare(const std::string& a, const std::string& b) {
return std::equal(a.begin(), a.end(), b.begin(), b.end(),
[](char c1, char c2) { return std::tolower(c1) == std::tolower(c2); });
}
std::string str1 = "Hello";
std::string str2 = "hello";
if (caseInsensitiveCompare(str1, str2)) {
std::cout << "Строки равны без учета регистра!\n";
}
4️⃣ Сравнение подстрок
Если нужно проверить, начинается ли строка с подстроки:
std::string text = "hello world";
std::string prefix = "hello";
if (text.rfind(prefix, 0) == 0) {
std::cout << "Строка начинается с 'hello'!\n";
}
✅
rfind(prefix, 0) == 0
проверяет, что prefix
стоит в начале строки.🚀 Итоги
✔ Используйте
==
для простого сравнения ✔
compare()
– если важно узнать порядок ✔ Для регистра –
std::tolower()
✔ Для подстрок –
rfind()
Какой метод вы чаще используете? Делитесь в комментариях!
#cpp #programming
👉 @cpp_lib