Senior C++ Developer
13.1K subscribers
1.26K photos
4 videos
578 links
№ 4931128893
Изучаем C++.

По вопросам сотрудничества: @adv_and_pr
Download Telegram
➡️ Оптимизация работы с большими объектами с помощью std::move и семантики перемещения

std::move — это функция, которая превращает объект в "rvalue" (правостороннее значение), позволяя использовать семантику перемещения вместо копирования. Это особенно полезно при работе с большими объектами, где копирование может быть дорогим.

В этом примере используется std::move, чтобы передать большой объект LargeObject в функцию processLargeObject с использованием семантики перемещения. Вместо дорогостоящего копирования большого массива, память просто передается новому объекту, что значительно улучшает производительность.
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Оптимизация доступа к элементам через std::deque с использованием индексации

std::deque — это контейнер, который позволяет эффективное добавление и удаление элементов как с начала, так и с конца. В отличие от std::vector, std::deque обеспечивает постоянное время доступа к элементам как в начале, так и в конце контейнера.

Используйте std::deque в тех случаях, когда вам нужен быстрый доступ к элементам по индексу, но также важна возможность эффективного добавления и удаления элементов с обоих концов контейнера.
Please open Telegram to view this post
VIEW IN TELEGRAM
SourceCraft запустил конкурс репозиториев и прием заявок на грантовую программу.

Загружайте проекты, собирайте отклики сообщества и получайте шанс попасть в число лучших.

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

Платформа помогает сократить путь от идеи до релиза: код, тесты, сборка и выкатывание продукта делаются быстрее и удобнее прямо в SourceCraft.

Информация об организаторе Акции, о правилах проведения Акции, количестве призов, сроках, месте и порядке их получения размещена по ссылке.
➡️ Сжатие данных с использованием std::vector::shrink_to_fit

std::vector::shrink_to_fit — метод, который позволяет уменьшить емкость вектора до его фактического размера. Это полезно, когда нужно освободить память, занимаемую неиспользуемыми элементами, особенно после значительного сокращения размера вектора.

Вектор заполняется 100 элементами, после чего большая часть элементов удаляется. Использование shrink_to_fit позволяет уменьшить емкость вектора до текущего количества элементов, что освобождает ненужную память.

Используйте shrink_to_fit, когда нужно минимизировать использование памяти после удаления большого числа элементов из вектора. Это улучшает производительность и снижает потребление ресурсов, что особенно важно в средах с ограниченной памятью.
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Библиотека SQLiteCpp

SQLiteCpp — это тонкая обертка вокруг SQLite, одной из самых популярных легковесных реляционных баз данных. Библиотека предоставляет удобный и безопасный интерфейс для работы с SQLite в C++, облегчая взаимодействие с базами данных.

Если вам нужно встроить простую, но мощную базу данных в ваше C++ приложение, SQLiteCpp — это то, что вам нужно.

🔗 Ссылочка на доку
Please open Telegram to view this post
VIEW IN TELEGRAM
С++26 и рефлексия: что нового и как это изменит программирование?

🚀На последней встрече ISO C++ в Софии обсудили долгожданные новшества в стандарте С++26, и они реально впечатляют. Одно из самых ожидаемых нововведений — рефлексия на уровне компиляции. Это значит, что теперь можно будет работать с типами и метаданными прямо в коде, без жертвования производительностью.

Но это не всё: новые возможности для параллельных алгоритмов, улучшенная безопасность и ещё множество фишек, которые точно изменят представление о C++. Городские сервисы Яндекса собрали и структурировали всё самое важное со встречи. Такое мы читаем!


Реклама. ООО «ЯНДЕКС», ИНН 7736207543
➡️ Библиотека PEGTL

PEGTL (Parsing Expression Grammar Template Library) — это библиотека для создания синтаксических анализаторов (парсеров) на C++. Она предоставляет мощные инструменты для определения грамматик и разбора текстов, что делает ее отличным выбором для создания языков программирования и обработки текстов.

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

🔗 Ссылочка на доку
Please open Telegram to view this post
VIEW IN TELEGRAM
Алгоритм prev_permutation

Алгоритм переставляет элементы так, чтобы получилась предыдущая в лексикографическом порядке перестановка. Можно применять не только к векторам, но и к строкам (как и многие другие алгоритмы).

Метод возвращает true, если удалось построить предыдущую в лексикографическом порядке перестановку. Если же первоначальная перестановка уже была минимальной в лексикографическом порядке, то метод генерирует максимальную в лексикографическом порядке перестановку и возвращает false.
#вопросы_с_собеседований
В чем проблема следующего фрагмента?

Из спецификации (C++11 §5.3.5/3):

Если статический тип подлежащего удалению объекта отличается от его динамического типа, статический тип должен быть базовым классом динамического типа подлежащего удалению объекта и иметь виртуальный деструктор или поведение undefined.
#вопросы_с_собоседований
В чем различия между delete и delete[]?

delete предназначен для уничтожения объектов, память под которые выделена при помощи new(). delete[] для объектов выделенных при помощи оператора new[]().

При неправильном использовании оператора delete (например, delete вместо delete[]) результат будет: undefined behavior.
Snakeискусственный интеллект для игры «Змейка»

Цель змеи – постоянно есть пищу и как можно скорее заполнить карту своим телом

Первоначально проект был написан на C++. Теперь он был переписан на Python с удобным графическим интерфейсом для пользователя

https://github.com/chuyangliu/snake
➡️ auto & decltype

auto-типизированные переменные выводятся компилятором на основе типа их инициализатора.
Чрезвычайно полезно с точки зрения удобочитаемости, особенно для сложных типов:

// std::vector<int>::const_iterator cit = v.cbegin();
auto cit = v.cbegin(); // альтернатива

// std::shared_ptr<vector<uint32_t>> demo_ptr(new vector<uint32_t>(0);
auto demo_ptr = make_shared<vector<uint32_t>>(0); // альтернатива


Функции также могут выводить тип возвращаемого значения с помощью auto. В C++11 тип возвращаемого значения должен быть указан либо явно, либо с помощью decltype, например:

template <typename X, typename Y>
auto add(X x, Y y) -> decltype(x + y)
{
return x + y;
}
add(1, 2); // == 3
add(1, 2.0); // == 3.0
add(1.5, 1.5); // == 3.0


Приведенная выше форма определения возвращаемого типа называется trailing return type, т.е. -> return-type.
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Модули (Modules) в C++

Модули - это система сборки и организации кода, представленная в C++20.

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

Модули заменяют использование препроцессорных директив #include, улучшая время компиляции и предотвращая проблемы с зависимостями и макросами.

Модули значительно сокращают время компиляции по сравнению с традиционными заголовочными файлами, так как они компилируются только один раз.

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

Модули упрощают управление зависимостями и организацию кода, что делает проекты более поддерживаемыми и масштабируемыми.
Please open Telegram to view this post
VIEW IN TELEGRAM