Библиотека 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
May 13
⛄️ Как использовать std::span для безопасного доступа к последовательностям данных

Устали от споров «что лучше передать: вектор, массив или указатель с длиной»? C++20 предлагает элегантное решение!

#include <span>
#include <vector>
#include <array>

// Функция работает с ЛЮБЫМ непрерывным контейнером!
void processData(std::span<const int> data) {
for (const auto& item : data) {
// Обработка
}
}

int main() {
// Работает с std::vector
std::vector<int> vec = {1, 2, 3, 4, 5};
processData(vec);

// Работает с std::array
std::array<int, 3> arr = {10, 20, 30};
processData(arr);

// Работает с C-массивами
int classic[] = {100, 200, 300};
processData(classic);

// Работает с подпоследовательностями!
processData(std::span(vec).subspan(1, 3)); // Только элементы 2,3,4
}


❗️Преимущества std::span:

- Не владеет данными (zero overhead)
- Безопасно передает подпоследовательности
- Унифицированный интерфейс для всех контейнеров
- Выразительный код без шаблонных параметров

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
May 14
🍴Промпт для модернизация легаси кода

Есть желание использовать современные языковые фитчи, но переписывать код в ручную долго и скучно, тогда можно воспользоваться помощью искусственного интеллекта😄

Для того чтобы сделать свой код более современным используй следующий промпт:

Refactor the following code to modern [Тут напиши стандарт] programming standards:

[Сюда вставь свой код]



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

Refactor the following code to modern c++23 programming standards:

int* createIntArray(int size) {
int* arr = new int[size];
for (int i = 0; i < size; ++i) {
arr[i] = i * i;
}
return arr;
}



Результат работы промпта:

#include <memory>
#include <vector>
#include <algorithm>

// Option 1: Return a std::vector (recommended for most cases)
auto createIntArray(int size) -> std::vector<int> {
std::vector<int> arr(size);
std::ranges::generate(arr, [i = 0]() mutable { return i * i++; });
return arr;
}

// Option 2: Return a std::unique_ptr (if you specifically need heap allocation)
auto createIntArrayUnique(int size) -> std::unique_ptr<int[]> {
auto arr = std::make_unique<int[]>(size);
for (int i = 0; i < size; ++i) {
arr[i] = i * i;
}
return arr;
}


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

👀 А как ты приводишь свой код к более современному виду? Делитесь в комментариях!

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
May 15
May 15
May 15
May 16
May 16
May 17
May 18
Что произойдёт при использовании источников диапазонов (C++20)?
Anonymous Quiz
17%
12
49%
34
20%
345
14%
Ошибка компиляции
May 19
May 19
🤓 Как использовать концепты C++20 для создания надежного кода

Устали от непонятных ошибок шаблонов? Концепты спешат на помощь.

//  Старый подход без концептов
template<typename T>
T max_value(const std::vector<T>& values) {
// Ошибка будет обнаружена только при инстанциации шаблона
return *std::max_element(values.begin(), values.end());
}

// Современный подход с концептами
template<typename T>
requires std::totally_ordered<T>
T max_value(const std::vector<T>& values) {
return *std::max_element(values.begin(), values.end());
}

// Еще короче с auto
auto max_value(const std::vector<std::totally_ordered auto>& values) {
return *std::max_element(values.begin(), values.end());
}


❗️Преимущества:

- Более понятные сообщения об ошибках
- Документирование требований в коде
- Перегрузка на основе свойств типов

Встроенные концепты: std::integral, std::floating_point, std::copyable, std::same_as и другие.

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