Форум программистов, компьютерный форум, киберфорум
C++20
Войти
Регистрация
Восстановить пароль
Старый
Представления как элементы данных для пользовательских итераторов - Оптимизация
Запись от bytestream размещена 04.08.2025 в 16:51
Показов 4827 Комментарии 0
Метки c++, c++20, range, sfinae, stl

Нажмите на изображение для увеличения
Название: Представления как элементы данных для пользовательских итераторов 3.jpg
Просмотров: 358
Размер:	170.8 Кб
ID:	11029
Разумеется, у представлений и их использования для создания пользовательских итераторов не только сплошные преимущества. За годы экспериментов с этим подходом я набил немало шишек и хочу поделиться опытом, чтобы вы не наступали на те же грабли.

Типичные ошибки при реализации



Первое, с чем я регулярно сталкиваюсь (и что часто прижигает новичков в работе с представлениями)...
Аватар для bytestream
Старый
Представления как элементы данных для пользовательских итераторов - Создание собственного итератора-представления
Запись от bytestream размещена 03.08.2025 в 12:49
Показов 3866 Комментарии 0

Нажмите на изображение для увеличения
Название: Представления как элементы данных для пользовательских итераторов 2.jpg
Просмотров: 429
Размер:	196.7 Кб
ID:	11028
Я хочу показать, как создать собственный итератор, используя представления в качестве членов класса. Для меня этот подход стал настоящим откровением, когда я пытался решить классическую проблему обхода вложенных структур данных.

Итератор для вектора векторов



Представьте типичную задачу с собеседования: у вас есть вектор векторов, и вам нужно реализовать итератор,...
Аватар для bytestream
Старый
Представления как элементы данных для пользовательских итераторов - Введение
Запись от bytestream размещена 02.08.2025 в 21:55
Показов 3706 Комментарии 0

Нажмите на изображение для увеличения
Название: Представления как элементы данных для пользовательских итераторов.jpg
Просмотров: 405
Размер:	169.6 Кб
ID:	11027
Когда я впервые столкнулся с представлениями (views) в C++20, то сразу понял - это игра по новым правилам. В мире, где производительность по-прежнему стоит во главе угла, а память все дороже, возможность создавать абстракции без накладных расходов выглядит почти как магия. Но это не магия, а...
Аватар для bytestream
Старый
Форматирование текста с std::format в C++
Запись от bytestream размещена 07.05.2025 в 15:03
Показов 3164 Комментарии 0
Метки c++, c++20, std::format

Нажмите на изображение для увеличения
Название: 8907d03d-3a4c-4c84-bcc1-0ab1b715076b.jpg
Просмотров: 161
Размер:	234.3 Кб
ID:	10761
Форматирование текста — одна из самых распространённых задач, с которыми сталкивается каждый разработчик. За долгую историю C++ было создано несколько подходов к решению этой казалось бы тривиальной проблемы, но, как часто бывает в мире программирования, у каждого из них обнаружились свои недостатки. Всё начиналось с печально известного семейства функций printf, унаследованных из языка C. Помню свой первый крупный проект на C++ — я тогда...
Аватар для bytestream
Старый
Гайд по std::span в C++
Запись от NullReferenced размещена 07.05.2025 в 10:39 / C++ for fun and for life
Показов 4569 Комментарии 0
Метки c++, c++20, std::span

Нажмите на изображение для увеличения
Название: 855ddf89-42d5-41a7-9291-cd590bf5d516.jpg
Просмотров: 168
Размер:	273.6 Кб
ID:	10756
std::span — это решение реальной проблемы, с которой сталкиваются все C++ разработчики: как эффективно передавать последовательности данных между функциями, не вдаваясь в детали их внутренного представления? Раньше нам приходилось писать перегрузки функций для разных типов контейнеров, создавать собственные адаптеры или просто использовать указатели с длиной — все эти подходы не только неэлегантны, но и чреваты ошибками. Вся прелесть std::span в его универсальности....
Аватар для NullReferenced
Старый
Использование корутин C++ для асинхронных задач
Запись от bytestream размещена 03.05.2025 в 20:09
Показов 5155 Комментарии 0

Нажмите на изображение для увеличения
Название: 31565451-1274-451d-a716-f5afb409ce3a.jpg
Просмотров: 152
Размер:	183.3 Кб
ID:	10727
Разработчики, погруженные в мир современного программирования, ежедневно сталкиваются с неизбежным сближением высокой производительности и простоты кода. Асинхронное программирование – одна из тех областей, где достичь этого баланса традиционно считалось...
Аватар для bytestream
Старый
Алгоритм Дейкстры на C++
Запись от NullReferenced размещена 02.05.2025 в 22:15 / C++ for fun and for life
Показов 6715 Комментарии 0
Метки algorithm, c++, c++20, dijkstra

Нажмите на изображение для увеличения
Название: 39be7ef8-cfb5-4583-a7d8-3f51b266635b.jpg
Просмотров: 228
Размер:	247.5 Кб
ID:	10719
Среди алгоритмов поиска кратчайшего пути алгоритм Дейкстры – настоящий старожил, который, несмотря на почтенный возраст, остаётся одним из самых востребованных инструментов в арсенале программиста. Разработанный нидерландским учёным Эдсгером Дейкстрой в 1956...
Аватар для NullReferenced
Старый
Конкурентность, асинхронность и параллелизм в C++
Запись от NullReferenced размещена 02.05.2025 в 12:55 / C++ for fun and for life
Показов 4453 Комментарии 0

Нажмите на изображение для увеличения
Название: 054cc24f-11a2-42ec-9f9e-ac086a45ae40.jpg
Просмотров: 183
Размер:	197.1 Кб
ID:	10710
Конкурентность и параллелизм — два термина, которые нередко используются как синонимы, хотя между ними пролегает пропасть смысла. Конкурентность — это возможность выполнять задачи с перекрывающимися временными рамками, даже если на самом деле они выполняются...
Аватар для NullReferenced
Старый
C++ в XXI веке - Эволюция языка и взгляд Бьярне Страуструпа
Запись от bytestream размещена 29.04.2025 в 13:54
Показов 5989 Комментарии 0
Метки c++, c++20, c++23, c++26, stroustrup

Нажмите на изображение для увеличения
Название: 38c6a74a-1e51-4fc9-b831-be09c85bc409.jpg
Просмотров: 149
Размер:	143.3 Кб
ID:	10696
C++ существует уже более 45 лет с момента его первоначальной концепции. Как и было задумано, он эволюционировал, отвечая на новые вызовы, но многие разработчики продолжают использовать C++ так, будто на дворе всё ещё прошлое тысячелетие — когда телефоны приходилось...
Аватар для bytestream
Старый
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
Запись от NullReferenced размещена 07.04.2025 в 13:15 / C++ for fun and for life
Показов 5015 Комментарии 0
Метки c++, c++20, c++23, c++26, std::ranges

Нажмите на изображение для увеличения
Название: bf44ba56-2caf-4fac-9629-78846ff8a82d.jpg
Просмотров: 219
Размер:	237.7 Кб
ID:	10547
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от использования массивов в C-стиле до современной библиотеки ranges. Однако некоторые казалось бы простые операции, как объединение нескольких последовательностей, долгое время...
Аватар для NullReferenced
Старый
Рейтинг: 5.00. Голосов: 1.
Многопоточное программирование: Rust против C++
Запись от golander размещена 06.04.2025 в 10:49 / go go just go
Показов 4846 Комментарии 0

Нажмите на изображение для увеличения
Название: 791ba567-8ab9-4c84-ae70-c8d54f3f2740.jpg
Просмотров: 253
Размер:	120.5 Кб
ID:	10540
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих версиях (C++17 и C++20) набор многопоточных инструментов значительно расширился. Однако исторический багаж и обратная совместимость привели к тому, что параллельное программирование в C++ часто связано с множеством подводных камней.

Rust изначально проектировался...
Аватар для golander
Старый
std::span в C++: Производительность и лучшие практики
Запись от NullReferenced размещена 28.03.2025 в 22:18 / C++ for fun and for life
Показов 6433 Комментарии 0
Метки c++, c++20, std::span

Нажмите на изображение для увеличения
Название: 6e36176d-7698-445c-b8ad-0b85590be921.jpg
Просмотров: 234
Размер:	134.0 Кб
ID:	10492
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление непрерывной последовательности объектов, которое ссылается на существующие...
Аватар для NullReferenced
Старый
std::span в C++: Подпредставлени­я и срезы
Запись от NullReferenced размещена 18.03.2025 в 21:27 / C++ for fun and for life
Показов 1938 Комментарии 0
Метки c++, c++20, std::span

Нажмите на изображение для увеличения
Название: 69cb2d7c-adfc-46de-b3f7-dbdb4aafc06b.jpg
Просмотров: 199
Размер:	238.2 Кб
ID:	10453
Если вы когда-нибудь работали с большими объемами данных в C++, то наверняка сталкивались с необходимостью манипулировать отдельными частями массивов или контейнеров. Традиционные подходы часто требуют создания копий данных, что приводит к избыточному потреблению памяти и снижению производительности. В современном C++ появился способ решения этой проблемы — std::span, представленный в стандарте C++20.

...
Аватар для NullReferenced
Старый
std::span в C++: Доступ к элементам и итерирование
Запись от NullReferenced размещена 18.03.2025 в 21:20 / C++ for fun and for life
Показов 1892 Комментарии 0
Метки c++, c++20, std::span

Нажмите на изображение для увеличения
Название: 5c7f0fc1-91c1-49f3-8743-99269c28dc64.jpg
Просмотров: 167
Размер:	181.1 Кб
ID:	10452
В C++ каждый разработчик сталкивается с проблемой эффективного управления последовательностями данных. Представьте: вы работаете с массивом, передаете его в функцию, а затем в другую, и каждый раз сомневаетесь — правильно ли установлены границы, не выйдете ли за пределы. Именно эту головную боль призван устранить std::span — относительно новый компонент стандартной библиотеки, появившийся в C++20.

std::span — это невладеющее представление...
Аватар для NullReferenced
Старый
std::span в C++: Введение в невладеющее представление
Запись от NullReferenced размещена 18.03.2025 в 20:50 / C++ for fun and for life
Показов 1865 Комментарии 0
Метки c++, c++20, std::span

Нажмите на изображение для увеличения
Название: 9da2ed95-f2c6-4369-ae08-df4084222522.jpg
Просмотров: 128
Размер:	197.6 Кб
ID:	10450
С появлением стандарта C++20 у нас появился новый инструмент — std::span, который представляет собой невладеющее представление для работы с последовательностями данных.

std::span — это легковесный объект, который предоставляет доступ к непрерывной последовательности элементов без владения ими. По сути, это "взгляд" на существующие...
Аватар для NullReferenced
Старый
Рейтинг: 5.00. Голосов: 2.
Преобразование строк в C++: std::from_chars от C++17 до C++26
Запись от NullReferenced размещена 15.03.2025 в 20:26 / C++ for fun and for life
Показов 2713 Комментарии 3

Нажмите на изображение для увеличения
Название: a322ada0-7ec7-4ee3-b03d-ffc9f20e904d.jpg
Просмотров: 176
Размер:	130.0 Кб
ID:	10414
Конвертация строк в числа — задача, с которой сталкивается практически каждый C++ разработчик. Несмотря на кажущуюся простоту, эта операция таит множество подводных камней и неочевидных последствий для производительности и надежности кода. До появления C++17 у нас имелся целый зоопарк различных методов для преобразования текстовых данных в числовые значения. Каждый из них обладал своими особенностями и недостатками:

Функции старого стиля из C предлагали...
Аватар для NullReferenced
Старый
Стандарты C++ от C++98 до C++26
Запись от NullReferenced размещена 08.03.2025 в 21:47 / C++ for fun and for life
Показов 5016 Комментарии 0
Метки c++, c++11, c++14, c++17, c++20, c++23, c++26, c++98

Нажмите на изображение для увеличения
Название: a87625d1-ca52-4aa9-99bd-39628c3e265a.jpg
Просмотров: 466
Размер:	194.1 Кб
ID:	10341
Первый официальный стандарт C++ появился на свет в 1998 году, спустя почти два десятилетия после создания самого языка Бьярном Страуструпом. Это был важнейший шаг — C++ наконец-то получил чёткую спецификацию, что положило конец "диалектам" компиляторов и упростило жизнь программистов....
Аватар для NullReferenced
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru