This media is not supported in your browser
VIEW IN TELEGRAM
Бесплатное IT-образование в 2024
Отобрали для вас полезные телеграм-каналы, которые помогут освоить программирование и другие IT-направления
Выбирайте нужное и подписывайтесь:
👩💻 С/С++: @Cpportal
📱 GitHub: @git_developer
🤓 Книги айти: @portalToIT
👩💻 Golang: @juniorGolang
👩💻 PHP: @PHPortal
👩💻 Моб. разработка: @MobDev
👩💻 Java: @Java_Iibrary
👩💻 Frontend: @FrontendPortal
⚙️ Backend: @BackendPortal
👩💻 Python: @PythonPortal
👩💻 C#: @KodBlog
🖥 Базы Данных & SQL: @SQL
👩💻 Разработка игр: @GameDevgx
👩💻 DevOps: @loose_code
🖥 Data Science: @DataSciencegx
🤔 Хакинг & ИБ: @cybersecinform
🐞 Тестирование: @QAPortal
📱 Маркетинг: @MarketingPortal
🖥 Дизайн: @PortalToDesign
➡️ Сохраняйте себе, чтобы не потерять
Отобрали для вас полезные телеграм-каналы, которые помогут освоить программирование и другие IT-направления
Выбирайте нужное и подписывайтесь:
🐞 Тестирование: @QAPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Узнаем сколько лет человеку по дате его рождения
В этом коде мы запрашиваем у пользователя его дату рождения, а затем получаем текущую дату с помощью функции
➡️ @cpp_geek
В этом коде мы запрашиваем у пользователя его дату рождения, а затем получаем текущую дату с помощью функции
time
. Затем мы используем структуру tm для извлечения года, месяца и дня из текущей даты и вычисляем количество полных лет с помощью формулы now->tm_year + 1900 - year. Если текущий месяц и день меньше, чем месяц и день рождения, мы уменьшаем возраст на 1. Наконец, мы выводим результат на экран.➡️ @cpp_geek
Что такое rvalue, lvalue?
lvalue — это всё, что имеет имя, rvalue — это то, что имени не имеет. Исторически сложились такие названия, потому что lvalue всегда было то, что писалось с левой стороны присваивающего выражения, а rvalue — это то, что появлялось только справа от этого выражения.
➡️ @cpp_geek
lvalue — это всё, что имеет имя, rvalue — это то, что имени не имеет. Исторически сложились такие названия, потому что lvalue всегда было то, что писалось с левой стороны присваивающего выражения, а rvalue — это то, что появлялось только справа от этого выражения.
➡️ @cpp_geek
std::sort
std::sort — это функция стандартной библиотеки для сортировки элементов в контейнерах, таких как вектор или список.
Чтобы использовать std::sort, нужно подключить заголовочный файл .
Метод принимает в качестве аргументов итераторы на начало и конец сортируемой последовательности и сортирует элементы в возрастающем порядке по умолчанию.
Для определения порядка сортировки можно указать свой компаратор.
➡️ @cpp_geek
std::sort — это функция стандартной библиотеки для сортировки элементов в контейнерах, таких как вектор или список.
Чтобы использовать std::sort, нужно подключить заголовочный файл .
Метод принимает в качестве аргументов итераторы на начало и конец сортируемой последовательности и сортирует элементы в возрастающем порядке по умолчанию.
Для определения порядка сортировки можно указать свой компаратор.
➡️ @cpp_geek
Что такое std::sample?
Описание его функциональности:
1. Выбирает n уникальных элементов случайным образом из входного диапазона
2. Копирует выбранные элементы в выходной диапазон
3. Сохраняет относительный порядок выбранных элементов
Синтаксис:
- input_begin и input_end — итераторы входного диапазона
- output_begin — итератор выходного диапазона
- n — количество элементов для выборки
- generator — генератор случайных чисел
➡️ @cpp_geek
std::sample
— алгоритм который позволяет брать случайный элемент из диапазона. Был введён в C++ 17. Описание его функциональности:
1. Выбирает n уникальных элементов случайным образом из входного диапазона
2. Копирует выбранные элементы в выходной диапазон
3. Сохраняет относительный порядок выбранных элементов
Синтаксис:
std::sample(input_begin, input_end, output_begin, n, generator);
- input_begin и input_end — итераторы входного диапазона
- output_begin — итератор выходного диапазона
- n — количество элементов для выборки
- generator — генератор случайных чисел
➡️ @cpp_geek
std::variant
Это фича C++17, обеспечивающая типобезопасное объединение, позволяющее хранить и манипулировать значениями разных типов в одном объекте. Она является частью стандартной библиотеки C++ и определена в заголовке .
Шаблонный класс
Основными функциями
В этом примере мы создаем объект
Однако, если мы попытаемся получить значение, используя неправильный тип (например,
➡️ @cpp_geek
Это фича C++17, обеспечивающая типобезопасное объединение, позволяющее хранить и манипулировать значениями разных типов в одном объекте. Она является частью стандартной библиотеки C++ и определена в заголовке .
Шаблонный класс
std::variant
похож на упрощенную версию union, но с дополнительной безопасностью типов и поддержкой различных операций.Основными функциями
std::variant
являются index()
, valueless_by_exception()
, operator=, emplace
.В этом примере мы создаем объект
var
, который может содержать значения типов int
, float
или std::string
. Мы присваиваем var
различные значения и получаем их с помощью std::get
.Однако, если мы попытаемся получить значение, используя неправильный тип (например,
std::get(var)
, когда вариант содержит std::string
, это вызовет исключение std::bad_variant_access
.➡️ @cpp_geek
SIMD (Single Instruction Multiple Data)
Это технология, позволяющая одновременно выполнять одну и ту же операцию над несколькими наборами данных. В современных процессорах SIMD-инструкции реализованы для ускорения работы с векторными операциями. В C++ SIMD-инструкции доступны через библиотеку immintrin.h.
В данном примере функция addVectors принимает на вход указатели на три массива a, b и c, каждый из которых содержит 8 элементов типа float. С помощью функции _mm256_loadu_ps происходит загрузка первого и второго векторов в регистры, затем с помощью функции _mm256_add_ps происходит их покомпонентное сложение. Результат сохраняется в третий вектор с помощью функции _mm256_storeu_ps.
➡️ @cpp_geek
Это технология, позволяющая одновременно выполнять одну и ту же операцию над несколькими наборами данных. В современных процессорах SIMD-инструкции реализованы для ускорения работы с векторными операциями. В C++ SIMD-инструкции доступны через библиотеку immintrin.h.
В данном примере функция addVectors принимает на вход указатели на три массива a, b и c, каждый из которых содержит 8 элементов типа float. С помощью функции _mm256_loadu_ps происходит загрузка первого и второго векторов в регистры, затем с помощью функции _mm256_add_ps происходит их покомпонентное сложение. Результат сохраняется в третий вектор с помощью функции _mm256_storeu_ps.
➡️ @cpp_geek
Бинарный поиск
Чаще всего бинарный поиск (бинпоиск) используют, чтобы найти элемент в отсортированном массиве. Мы начинаем искать с середины массива. Если находим то, что нужно, или если больше нечего рассматривать, мы останавливаемся.
В противном случае мы решаем, в каком направлении — вправо или влево от середины — мы должны продолжить поиск. Так как пространство поиска после каждой проверки делится на два, то время выполнения алгоритма — O(log n).
Код выводит следующее:
бинарный поиск: нашли по индексу 4
Если искомый элемент не найден, но мы хотим найти ближайший элемент меньше или больше запроса, то можно использовать функции STL
➡️ @cpp_geek
Чаще всего бинарный поиск (бинпоиск) используют, чтобы найти элемент в отсортированном массиве. Мы начинаем искать с середины массива. Если находим то, что нужно, или если больше нечего рассматривать, мы останавливаемся.
В противном случае мы решаем, в каком направлении — вправо или влево от середины — мы должны продолжить поиск. Так как пространство поиска после каждой проверки делится на два, то время выполнения алгоритма — O(log n).
Код выводит следующее:
бинарный поиск: нашли по индексу 4
Если искомый элемент не найден, но мы хотим найти ближайший элемент меньше или больше запроса, то можно использовать функции STL
lower_bound()
и upper_bound()
.➡️ @cpp_geek
📌 Оптимизация кода с
Привет, друзья! Сегодня поговорим про
💡 Зачем нужен
Обычно, если функция не может вернуть корректное значение, приходится использовать:
✔ Возвращаемое значение с ошибочным кодом (неудобно, особенно если 0 или
✔ Выброс исключения (дорого по ресурсам).
✔ Указатели (
🔥 Альтернатива? Используем
✅ Код стал чище: нет лишних проверок
🎯 Когда использовать?
🔹 Когда функция может вернуть "ничего", но исключения и специальные значения не подходят.
🔹 Для более понятного API (например, парсинг строки в число).
🔹 Когда важно избежать неопределенного состояния (например, с переменной внутри класса).
А ты уже используешь
➡️ @cpp_geek
std::optional
в C++ Привет, друзья! Сегодня поговорим про
std::optional
— мощный инструмент, который делает код чище и безопаснее. 💡 Зачем нужен
std::optional
? Обычно, если функция не может вернуть корректное значение, приходится использовать:
✔ Возвращаемое значение с ошибочным кодом (неудобно, особенно если 0 или
-1
могут быть валидными). ✔ Выброс исключения (дорого по ресурсам).
✔ Указатели (
nullptr
, но требует дополнительных проверок). 🔥 Альтернатива? Используем
std::optional
!
#include <iostream>
#include <optional>
#include <string>
std::optional<std::string> findUser(int id) {
if (id == 42) return "John Doe";
return std::nullopt;
}
int main() {
auto user = findUser(42);
if (user) {
std::cout << "User found: " << *user << std::endl;
} else {
std::cout << "User not found!" << std::endl;
}
}
✅ Код стал чище: нет лишних проверок
nullptr
, исключений или специальных значений. 🎯 Когда использовать?
🔹 Когда функция может вернуть "ничего", но исключения и специальные значения не подходят.
🔹 Для более понятного API (например, парсинг строки в число).
🔹 Когда важно избежать неопределенного состояния (например, с переменной внутри класса).
А ты уже используешь
std::optional
в своем коде? Делись опытом в комментариях! ⬇🔍➡️ @cpp_geek
Какие есть особенности статических полей класса в языке С++?
Статические поля класса в C++ имеют несколько особенностей:
1. Общий доступ: статические поля являются общими для всех объектов этого класса. Это означает, что изменение значения статического поля в одном объекте, изменяет его для всех объектов этого класса.
2. Инициализация: статические поля инициализируются только один раз, когда программа запускается. Значения статических полей сохраняются на протяжении всего времени работы программы.
3. Доступ: доступ к статическим полям класса возможен без создания объекта этого класса, например, используя имя класса и оператор :: .
4. Память: статические поля класса хранятся не в куче или стеке, а в статической области памяти, что позволяет им занимать память только один раз, независимо от количества созданных объектов класса.
➡️ @cpp_geek
Статические поля класса в C++ имеют несколько особенностей:
1. Общий доступ: статические поля являются общими для всех объектов этого класса. Это означает, что изменение значения статического поля в одном объекте, изменяет его для всех объектов этого класса.
2. Инициализация: статические поля инициализируются только один раз, когда программа запускается. Значения статических полей сохраняются на протяжении всего времени работы программы.
3. Доступ: доступ к статическим полям класса возможен без создания объекта этого класса, например, используя имя класса и оператор :: .
4. Память: статические поля класса хранятся не в куче или стеке, а в статической области памяти, что позволяет им занимать память только один раз, независимо от количества созданных объектов класса.
➡️ @cpp_geek
🚀 Оптимизация циклов в C++: маленькие хитрости для больших скоростей
Сегодня поговорим об оптимизации циклов в C++. Даже если ваш код работает, это не значит, что он работает быстро. Давайте разберём несколько трюков, которые помогут выжать максимум из циклов.
🔥 1. Избегайте ненужных вычислений внутри цикла
❌ Плохо:
✅ Хорошо:
Почему?
⚡ 2. Используйте
Если вы заранее знаете, сколько элементов добавите в
🏎️ 3. Предпочитайте
Классический цикл for:
Современный
Плюсы:
✅ Улучшает читаемость
✅ Избегает ненужных индексаций
✅ Позволяет компилятору оптимизировать код
🔄 4.
Если вы преобразуете данные из одного контейнера в другой, используйте
Зачем?
✔️ Работает быстрее за счёт оптимизаций
✔️ Код становится короче и читабельнее
🎯 Вывод
Оптимизация циклов — это не магия, а грамотное использование возможностей C++. Убирайте лишние вычисления, используйте
Используете ли вы
➡️ @cpp_geek
Сегодня поговорим об оптимизации циклов в C++. Даже если ваш код работает, это не значит, что он работает быстро. Давайте разберём несколько трюков, которые помогут выжать максимум из циклов.
🔥 1. Избегайте ненужных вычислений внутри цикла
❌ Плохо:
for (int i = 0; i < vec.size(); i++) {
process(vec[i]);
}
✅ Хорошо:
size_t size = vec.size();
for (size_t i = 0; i < size; i++) {
process(vec[i]);
}
Почему?
vec.size()
может вызываться при каждой итерации, что может замедлить выполнение, особенно если это не std::vector
, а другой контейнер.⚡ 2. Используйте
reserve()
для вектора Если вы заранее знаете, сколько элементов добавите в
std::vector
, вызовите reserve()
. Это сократит количество реаллокаций памяти.
std::vector<int> vec;
vec.reserve(1000); // резервируем место для 1000 элементов
for (int i = 0; i < 1000; i++) {
vec.push_back(i);
}
🏎️ 3. Предпочитайте
range-based for
Классический цикл for:
for (size_t i = 0; i < vec.size(); i++) {
process(vec[i]);
}
Современный
range-based for
:
for (const auto& elem : vec) {
process(elem);
}
Плюсы:
✅ Улучшает читаемость
✅ Избегает ненужных индексаций
✅ Позволяет компилятору оптимизировать код
🔄 4.
std::transform
вместо for
Если вы преобразуете данные из одного контейнера в другой, используйте
std::transform
:
std::vector<int> src = {1, 2, 3, 4, 5};
std::vector<int> dst(src.size());
std::transform(src.begin(), src.end(), dst.begin(), [](int x) { return x * 2; });
Зачем?
✔️ Работает быстрее за счёт оптимизаций
✔️ Код становится короче и читабельнее
🎯 Вывод
Оптимизация циклов — это не магия, а грамотное использование возможностей C++. Убирайте лишние вычисления, используйте
reserve()
, применяйте range-based for
и std::transform
, и ваш код станет быстрее и элегантнее.Используете ли вы
std::transform
в своём коде? Делитесь в комментариях! 👇➡️ @cpp_geek
📌 Оптимизация работы со строками в C++:
Привет, друзья! Сегодня хочу обсудить одну из самых частых проблем в C++ – работу со строками. А именно, почему
❌ Проблема: Копирование строк
Допустим, у вас есть функция, которая принимает строку:
Каждый раз, когда вызывается эта функция, создаётся новая копия строки. Если строка длинная, это дорого по времени и памяти.
✅ Решение: Используем
С
Теперь
🚀 Преимущества
✔ Не создает копий – работает быстрее.
✔ Поддерживает стандартные операции (
✔ Работает с
✔ Идеально подходит для парсинга и работы с текстом.
🔥 Важно помнить:
-
- Если строка-источник уничтожена,
Пример неверного использования:
➡️ @cpp_geek
std::string_view
vs std::string
Привет, друзья! Сегодня хочу обсудить одну из самых частых проблем в C++ – работу со строками. А именно, почему
std::string_view
– это мощный инструмент, который может значительно ускорить ваш код.❌ Проблема: Копирование строк
Допустим, у вас есть функция, которая принимает строку:
void process(std::string s) {
// работа со строкой
}
Каждый раз, когда вызывается эта функция, создаётся новая копия строки. Если строка длинная, это дорого по времени и памяти.
✅ Решение: Используем
std::string_view
С
std::string_view
можно избежать лишнего копирования:
void process(std::string_view s) {
// работа со строкой без копирования
}
Теперь
s
– это просто представление строки, а не её копия. Вы можете передавать как std::string
, так и char*
, что делает API более гибким.🚀 Преимущества
std::string_view
:✔ Не создает копий – работает быстрее.
✔ Поддерживает стандартные операции (
substr
, find
и т. д.). ✔ Работает с
std::string
, char*
, массивами символов. ✔ Идеально подходит для парсинга и работы с текстом.
🔥 Важно помнить:
-
std::string_view
не управляет памятью, так что будьте осторожны с временными строками.- Если строка-источник уничтожена,
std::string_view
станет невалидным.Пример неверного использования:
std::string_view bad() {
std::string s = "Hello";
return s; // ⚠ UB, строка уничтожена!
}
➡️ @cpp_geek
⚡
Сегодня поговорим о
❌ Проблема: Лишние копии данных
Представьте, что у нас есть функция, принимающая массив чисел:
С одной стороны, передача
Придётся перегружать функцию или копировать данные в
✅ Решение: Используем
🚀 Преимущества
✅ Не копирует данные — передаётся как ссылка
✅ Работает с любыми последовательностями
✅ Гибкость — можно создавать срезы без копий
Пример использования
⚠️ Важно
-
- Не поддерживает автоматическое изменение размера, как
📌 Итог
Если ваша функция принимает
➡️ @cpp_geek
std::span
— мощная альтернатива std::vector
и std::array
Сегодня поговорим о
std::span
— контейнере, который делает работу с массивами и векторами в C++ более удобной и эффективной. 🚀 ❌ Проблема: Лишние копии данных
Представьте, что у нас есть функция, принимающая массив чисел:
void processArray(const std::vector<int>& arr) {
for (int num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
}
С одной стороны, передача
const std::vector<int>&
предотвращает копирование, но что, если у нас массив std::array
или сырой int[]
? Придётся перегружать функцию или копировать данные в
std::vector
. ✅ Решение: Используем
std::span
std::span
позволяет передавать любой диапазон (`std::vector`, std::array
, сырые массивы) без копирования:
#include <iostream>
#include <span>
#include <vector>
#include <array>
void processArray(std::span<int> arr) {
for (int num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
}
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::array<int, 5> arr = {6, 7, 8, 9, 10};
int rawArr[] = {11, 12, 13, 14, 15};
processArray(vec); // ✅ Работает
processArray(arr); // ✅ Работает
processArray(rawArr); // ✅ Работает
}
🚀 Преимущества
std::span
✅ Не копирует данные — передаётся как ссылка
✅ Работает с любыми последовательностями
✅ Гибкость — можно создавать срезы без копий
Пример использования
.subspan()
, чтобы передавать часть массива:
std::vector<int> vec = {1, 2, 3, 4, 5};
std::span<int> sp = vec;
processArray(sp.subspan(2)); // Выведет: 3 4 5
⚠️ Важно
-
std::span
не владеет данными. Убедитесь, что исходные данные живут дольше span
. - Не поддерживает автоматическое изменение размера, как
std::vector
. 📌 Итог
Если ваша функция принимает
std::vector<int>&
, std::array<int, N>&
, int[]
или даже std::initializer_list<int>
, замените их на std::span<int>
! Это сделает код более гибким и эффективным. 🔥 ➡️ @cpp_geek
Подборка Telegram каналов для программистов
https://t.me/bash_srv Bash Советы
https://t.me/win_sysadmin Системный Администратор Windows
https://t.me/lifeproger Жизнь программиста. Авторский канал.
https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://t.me/rabota1C_rus Вакансии для программистов 1С
Системное администрирование 📌
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С
https://t.me/DevLab1C 1С:Предприятие 8
Программирование 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_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
Математика 📌
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/bash_srv Bash Советы
https://t.me/win_sysadmin Системный Администратор Windows
https://t.me/lifeproger Жизнь программиста. Авторский канал.
https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://t.me/rabota1C_rus Вакансии для программистов 1С
Системное администрирование 📌
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С
https://t.me/DevLab1C 1С:Предприятие 8
Программирование 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_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
Математика 📌
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
Bash Советы
🚀 Секреты и советы по Bash
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
💻 Прокачивай терминал вместе с нами! 👇
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
💻 Прокачивай терминал вместе с нами! 👇
📌 Как эффективно работать с
Всем привет! Сегодня расскажу о том, как правильно работать с
🔥 Почему
⚠️ Подводные камни и советы по оптимизации
1️⃣ Выбор хорошей хеш-функции
Стандартные хеш-функции (`std::hash`) работают хорошо для примитивных типов, но если вы работаете со сложными структурами (например,
Использование
2️⃣ Избегайте частых рехеширований
При вставке элементов хеш-таблица может перераспределять память (
Это особенно полезно, если вы примерно знаете, сколько элементов будет в контейнере.
3️⃣ Оптимизация использования памяти
Если ваш
Так вы избежите лишнего копирования.
4️⃣ Правильное использование
Перед
Или используйте
📌 Вывод:
➡️ @cpp_geek
std::unordered_map
? Всем привет! Сегодня расскажу о том, как правильно работать с
std::unordered_map
, чтобы избежать неожиданных проблем с производительностью. 🔥 Почему
std::unordered_map
? std::unordered_map
— это хеш-таблица в C++, обеспечивающая быстрый доступ к данным (O(1) в среднем). В отличие от std::map
, который построен на красно-черном дереве (O(log N) доступ), unordered_map
работает быстрее при больших объемах данных. ⚠️ Подводные камни и советы по оптимизации
1️⃣ Выбор хорошей хеш-функции
Стандартные хеш-функции (`std::hash`) работают хорошо для примитивных типов, но если вы работаете со сложными структурами (например,
std::pair
или std::string
), лучше использовать специализированные хешеры.
struct MyHash {
std::size_t operator()(const std::pair<int, int>& p) const {
return std::hash<int>()(p.first) ^ (std::hash<int>()(p.second) << 1);
}
};
Использование
^
(xor) и сдвигов помогает уменьшить коллизии. 2️⃣ Избегайте частых рехеширований
При вставке элементов хеш-таблица может перераспределять память (
rehash
), что затратно. Лучше заранее задать нужный размер:
std::unordered_map<int, std::string> myMap;
myMap.reserve(10000); // Уменьшаем количество рехеширований
Это особенно полезно, если вы примерно знаете, сколько элементов будет в контейнере.
3️⃣ Оптимизация использования памяти
Если ваш
unordered_map
хранит тяжелые структуры, можно использовать std::reference_wrapper
или хранить данные по shared_ptr
:
std::unordered_map<int, std::shared_ptr<MyStruct>> myMap;
Так вы избежите лишнего копирования.
4️⃣ Правильное использование
find
Перед
operator[]
всегда проверяйте, есть ли элемент в контейнере. Так вы избежите ненужных вставок:
if (myMap.find(key) != myMap.end()) {
// Обрабатываем существующий ключ
}
Или используйте
try_emplace
, чтобы избежать двойного вычисления ключа:
myMap.try_emplace(key, "значение по умолчанию");
📌 Вывод:
std::unordered_map
— мощный инструмент, но при неправильном использовании может работать неэффективно. Выбирайте хорошие хеш-функции, контролируйте рехеширование и оптимизируйте память. ➡️ @cpp_geek
СИБУР, «Росатом», Сколтех, МТС, Марс и другие топ-компании соберутся на TechnoCareer, чтобы поделиться карьерными возможностями с начинающими специалистами технических, промышленных или естественно-научных направлений - https://vk.cc/cK8OJ3
Что тебя ждёт?
— Расскажут о карьерных треках для студентов и выпускников технических сфер: физики, химии, нефтегаза и энергетики, инженерии и других
— Предложат оплачиваемые стажировки
— Проведут тест-драйв собеседований: сможешь решить задачи с реальных собеседований и щелкать их как орешки
— Организуют крутые активности с призами!
Приходи, узнай о востребованных направлениях и найди крутую работу! А если подтянешь друзей, сможешь выиграть сертификат OZON на 1000 рублей или гаджет.
Когда? 25 марта, Москва, Amber Plaza
Во сколько? 15:00 – 19:00 (заходи в любое время)
💥 Участие бесплатное, необходима регистрация — https://vk.cc/cK8OJ3?erid=2W5zFGAUzSk
Что тебя ждёт?
— Расскажут о карьерных треках для студентов и выпускников технических сфер: физики, химии, нефтегаза и энергетики, инженерии и других
— Предложат оплачиваемые стажировки
— Проведут тест-драйв собеседований: сможешь решить задачи с реальных собеседований и щелкать их как орешки
— Организуют крутые активности с призами!
Приходи, узнай о востребованных направлениях и найди крутую работу! А если подтянешь друзей, сможешь выиграть сертификат OZON на 1000 рублей или гаджет.
Когда? 25 марта, Москва, Amber Plaza
Во сколько? 15:00 – 19:00 (заходи в любое время)
💥 Участие бесплатное, необходима регистрация — https://vk.cc/cK8OJ3?erid=2W5zFGAUzSk
Подборка Telegram каналов для программистов
https://t.me/bash_srv Bash Советы
https://t.me/win_sysadmin Системный Администратор Windows
https://t.me/lifeproger Жизнь программиста. Авторский канал.
https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://t.me/rabota1C_rus Вакансии для программистов 1С
Системное администрирование 📌
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С
https://t.me/DevLab1C 1С:Предприятие 8
Программирование 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_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
Математика 📌
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/bash_srv Bash Советы
https://t.me/win_sysadmin Системный Администратор Windows
https://t.me/lifeproger Жизнь программиста. Авторский канал.
https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://t.me/rabota1C_rus Вакансии для программистов 1С
Системное администрирование 📌
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С
https://t.me/DevLab1C 1С:Предприятие 8
Программирование 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_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
Математика 📌
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
Bash Советы
🚀 Секреты и советы по Bash
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
💻 Прокачивай терминал вместе с нами! 👇
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
💻 Прокачивай терминал вместе с нами! 👇
Как упростить дебаг через
Когда вы отлаживаете сложный баг, бывает сложно быстро понять, где и почему произошла ошибка. С C++20 стало гораздо проще автоматизировать логирование и сделать его по-настоящему информативным.
Вот пример:
📌 Этот код выведет:
Вы больше не пишете руками
➡️ @cpp_geek
std::format
и std::source_location
Когда вы отлаживаете сложный баг, бывает сложно быстро понять, где и почему произошла ошибка. С C++20 стало гораздо проще автоматизировать логирование и сделать его по-настоящему информативным.
Вот пример:
#include <iostream>
#include <format>
#include <source_location>
void log(const std::string& message,
const std::source_location location = std::source_location::current())
{
std::cout << std::format("[{}:{} - {}] {}\n",
location.file_name(),
location.line(),
location.function_name(),
message);
}
int divide(int a, int b)
{
if (b == 0) {
log("Попытка деления на ноль");
return 0;
}
return a / b;
}
📌 Этот код выведет:
[main.cpp:16 - divide] Попытка деления на ноль
Вы больше не пишете руками
__FILE__
, __LINE__
и __func__
. Всё это делает std::source_location
. А с std::format
— красиво и читаемо.➡️ @cpp_geek
❓ Знали, что разработчики на С++ тоже могут эффективно автоматизировать инфраструктуру с помощью Terraform и GitLab?
⏰ 3 апреля в 20:00 мск на открытом уроке Вячеслав Федосеев объяснит, как разработчикам на С++ настроить CI/CD-пайплайны, управлять конфигурациями и легко разграничивать окружения.
Вячеслав — эксперт в IT с 2006 года, прошёл путь от первых Linux-серверов до масштабных DevOps-решений. Автор и ментор курсов по CI/CD и DevOps-практикам.
Если вы С++ разработчик, хотите упростить инфраструктуру ваших проектов и ускорить процессы — урок точно для вас. Освойте актуальные практики IaC и получите навыки, которые повысят вашу востребованность.
🎁 Участникам вебинара дарим скидку на полный курс по CI/CD на основе GitLab.
👉 Для участия зарегистрируйтесь
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
⏰ 3 апреля в 20:00 мск на открытом уроке Вячеслав Федосеев объяснит, как разработчикам на С++ настроить CI/CD-пайплайны, управлять конфигурациями и легко разграничивать окружения.
Вячеслав — эксперт в IT с 2006 года, прошёл путь от первых Linux-серверов до масштабных DevOps-решений. Автор и ментор курсов по CI/CD и DevOps-практикам.
Если вы С++ разработчик, хотите упростить инфраструктуру ваших проектов и ускорить процессы — урок точно для вас. Освойте актуальные практики IaC и получите навыки, которые повысят вашу востребованность.
🎁 Участникам вебинара дарим скидку на полный курс по CI/CD на основе GitLab.
👉 Для участия зарегистрируйтесь
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru