👩💻 #include хотят переименовать в #please
Комитет ISO пришёл к выводу, что вежливое обращение к компилятору снижает количество ошибок компиляции на 12%.
❗️ Компилятор тоже заслуживает уважения.
Попались? С первым апреля! 😁
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#развлекалово
Комитет ISO пришёл к выводу, что вежливое обращение к компилятору снижает количество ошибок компиляции на 12%.
#please <iostream>
#please <vector>
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#развлекалово
Please open Telegram to view this post
VIEW IN TELEGRAM
😁39❤🔥2😢2❤1
«Если ты думаешь, что циклы — это нормально, ты просто ещё не видел Ranges»
— Каждый разработчик C++20, примерно через неделю после знакомства с библиотекой
Добро пожаловать в мир
C++ Ranges — одного из самых мощных нововведений стандарта C++20.Если ты когда-нибудь писал вот такой код:
std::vector<int> result;
for (const auto& x : data) {
if (x % 2 == 0) {
result.push_back(x * x);
}
}
..то ты знаешь, как это может быть многословно.
Ranges позволяют написать то же самое так:auto result = data
| std::views::filter([](int x) { return x % 2 == 0; })
| std::views::transform([](int x) { return x * x; });
Красиво? Ещё и эффективнее! Давай разберёмся, как это работает.
Для работы со всеми примерами нужен компилятор с поддержкой C++20 (и лучше C++23):
#include <ranges> // std::views, std::ranges::*
#include <algorithm> // std::ranges::sort и другие
Range (диапазон) — это любой тип, у которого есть начало ( begin ) и конец ( end ). Всё, что тыпривык итерировать в цикле for , уже является диапазоном.
std::vector<int> v = {1, 2, 3, 4, 5}; // ✓ Range
std::string s = "hello"; // ✓ Range
int arr[] = {1, 2, 3}; // ✓ Range
std::list<double> l = {1.1, 2.2}; // ✓ RangeС технической точки зрения, тип
R является диапазоном, если для него определеныstd::ranges::begin(r) и std::ranges::end(r) . В C++ это выражается через концепт:template<typename R>
concept range = requires(R& r) {
std::ranges::begin(r); // требуем наличие begin
std::ranges::end(r); // требуем наличие end
};
•
input_range — однопроходный обход (Пример: поток ввода)•
forward_range — многопроходный обход (Пример: std::forward_list)•
bidirectional_range — обход в обе стороны (Пример: std::list)•
random_access_range — доступ за O(1) по индексу (Пример: std::deque)•
contiguous_range — данные в непрерывной памяти (Пример: std::vector , массив)📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#константная_правильность
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍9🙏2