Библиотека C/C++ разработчика | cpp, boost, qt
20.6K subscribers
1.67K photos
44 videos
16 files
3.85K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
Download Telegram
June 5
June 5
June 5
Please open Telegram to view this post
VIEW IN TELEGRAM
June 6
🧱 Для чего нужны плоские контейнеры и как их использовать

💡 В C++23 появились долгожданные «плоские» контейнеры: flat_set, flat_map, flat_multiset и flat_multimap — адаптеры, которые используют обычные векторы вместо деревьев.

❗️ Ключевые особенности:

• поиск O(log N) как в обычном set, но быстрее на практике
• итерация в разы быстрее классических контейнеров
• потребление памяти меньше на сотни процентов
• вставка и удаление катастрофически медленные O(N)

Основная идея — хранить данные в отсортированном векторе и использовать бинарный поиск. std::flat_map даже хранит ключи и значения в отдельных контейнерах для лучшей производительности.

Идеально подходят для сценариев «заполнил один раз — читаю много раз». Особенно эффективны при работе с миллионами элементов и компактными ключами.

⚠️ Не используйте их, если планируете частые вставки и удаления — в таких случаях классические std::set/map или unordered-контейнеры будут эффективнее.

🔜Статья

Библиотека C/C++ разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
June 6
June 7
Please open Telegram to view this post
VIEW IN TELEGRAM
June 7
June 8
June 9
June 10
June 10
June 10
⚡️ Фича дня: if consteval в C++23

Хотите разный код для compile-time и runtime? C++23 добавляет if consteval для условной компиляции!


🔴 До: Сложные трюки

template<typename T>
constexpr T compute() {
if (std::is_constant_evaluated()) {
return compile_time_version<T>();
}
return runtime_version<T>();
}



🟢 После: Читаемый consteval

template<typename T>
constexpr T compute() {
if consteval {
return compile_time_version<T>();
} else {
return runtime_version<T>();
}
}



❗️Практические применения:

• Оптимизированные математические библиотеки
• Compile-time криптография
• Генерация lookup-таблиц


💡Используете метапрограммирование в ваших проектах?

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
June 11
✏️ Промпт дня: Следуй стандартам кода в C++

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


🍴 Промпт для AI-помощника:

Rewrite the code below following the Google style guidelines for C++.

[Вставь свой код]



‼️ Пример использования промпта:

Было:

class userManager{
public:
int getUserCount(){return userCount;}
void setUserCount(int count){userCount=count;}
private:
int userCount;
};

void ProcessUserData(){
const int maxUsers=100;
userManager um;
for(int i=0;i<maxUsers;i++){
um.setUserCount(i);
}
}


Стало (после применения Google C++ Style Guide):

class UserManager {
public:
int GetUserCount() const { return user_count_; }
void SetUserCount(int count) { user_count_ = count; }

private:
int user_count_;
};

void ProcessUserData() {
const int MAX_USERS = 100;
UserManager user_manager;

for (int i = 0; i < MAX_USERS; ++i) {
user_manager.SetUserCount(i);
}
}


Что изменилось:

Функции в CamelCase
Переменные в snake_case
Константы в UPPER_CASE
Правильные отступы и пробелы


⛄️ А каким стилем для кода вы пользуетесь? Пишите в комментариях.

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
June 12
June 12