Как стать автором
Обновить
224.58

C++ *

Типизированный язык программирования

Сначала показывать
Период
Уровень сложности

Armadillo: матрицы, кубы и разреженные данные на C++

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров2.4K

Привет, Хабр!

Работа с матрицами в стандартном C++ — это боль, страдание и масса ненужного кода. Почему? Потому что стандартная библиотека STL вообще не предназначена для линейной алгебры. Например, если вы хотите умножить две матрицы, вам придётся писать кастомный алгоритм, отлаживать его, а затем ещё раз писать его, когда поймёте, что оптимизация не та.

Но есть библиотека Armadillo — и с ней всё иначе.

Читать далее

Как мы добавляли поддержку Apple Silicon в анализатор (arm64)

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров868

С выходом PVS-Studio 7.34 стали доступны нативные сборки анализатора для macOS на архитектуре Apple Silicon (ARM). В этой заметке мы хотели бы подробнее рассказать о проделанной работе, а также предложить советы по портированию кроссплатформенных инструментов на новую перспективную архитектуру.

Читать далее

Игровой автомат своими руками

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров5.1K

Создание игрового автомата с нуля своими руками!

Как сделать игровой автомат на ESP32 для обучения детей. За победу в игре выдает призы!

Читать далее

Быстрый однопоточный std::shared_ptr в GCC

Уровень сложностиПростой
Время на прочтение1 мин
Количество просмотров2.7K

Все знают что std::shared_ptr/weak_ptr тормозят, но это не повод от них отказываться и писать свой велосипед или небезопасный код на сырых указателях, ведь ситуацию можно исправить выключив синхронизацию потоков. Код который я вам покажу, работает в GCC и позволяет сконструировать новый shared_ptr без атомарных синхронизаций. Если у вас однопоточное приложение, вы можете подставить этот новый шаред поинтер за место старого для ускорения программы.

Ну чё там за код, показывай

Итерация по UENUM в Unreal Engine

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1K

Понадобилось мне создать панель категорий размещаемых предметов в UI. Как в градостроительных симуляторах. В наследие мне достался уже готовый UENUM, который в будущем будет изменен.

Естественно, очень не хотелось вручную перемещать и настраивать каждый отдельный виджет. Так еще и заниматься этим в будущем с изменениями категорий. Хотелось чего-то простого и универсального. Чтобы вот вызвал условный For Each Loop и сгенерировал все как надо, еще и не обязательно только для этого енама.

Выход был найден! Если мы создаем UENUM, то unreal сам генерирует всю нужную информацию и создает для нас UEnum класс, который является UObject. Нужно лишь правильно использовать эту информацию.

Читать далее

OSDEV: Разработка аллокатора на С++ часть 2: Слияние блоков за константное время. Юнит тест для аллокатора

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров1.9K

Приветствую, уважаемый читатель!

В первой части мы реализовали простейший аллокатор с минимальным оверхедом. Конечно же на самом деле все сложнее. Так реализация дефрагментации была наивной и не могла сливать блоки даже когда не было распределенных блоков после нескольких вызовов mem_free. Для того, что бы получить исходную картинку где будет только 2 служебных блока и один свободный нужно было бы вызвать mem_alloc с размером большим чем доступно памяти что бы искусственно запустить дефрагментацию. В этой части мы это исправим и напишем юнит тест для нашего аллокатора что бы убедится что он работает правильно.

Читать далее

Первый Pattern, первый квест

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров2.2K

Паттерн Команда (Hello World + Undo)

Всем привет. В этой небольшой статье хочу поделиться методом, к которому пришел, когда разрабатывал игру 2D. Та игра, где столкнулся впервые с такими вопросами, натолкнула меня на написание этой статьи и переосмыслении в том, чем я пользуюсь в С++ и как.

Подготовка рабочего пространства

Пользуюсь Линуксом, компилятор 14.2 gcc/g++, cmake>3.27, SDL3, X11.

Читать далее

Чем отличается изобретатель вечного двигателя от просто изобретателя?

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров4.6K

Если десятью словами: неумением ставить корректные эксперименты и экстремально гипертрофированным ощущением собственной важности. Я не буду описывать конкретный случай, с которым я столкнулся, а опишу выдуманный случай с такими же чертами.

Предположим к вам обратился товарищ, который хочет чтобы вы дали ему контакты принимающих решения менеджеров и топ-алгоритмистов в условном Микрософте. Зачем? После обмена репликами, где он сначала сопротивляется, выясняется что он изобрел новый алгоритм сортировки. В качестве доказательства он показывает программу на питоне, которая, по его словам, сортирует 10 чисел быстрее чем сортировка по умолчанию на питоне.

Читать далее

Видео экстензометр

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.6K

В 2010 году я начал работать в одной небольшой компании по производству испытательных машин (машины для физико-механических испытаний на растяжение, сжатие), там я в основном занимался разработкой программного обеспечения для управления испытательными машинами, а также сбором и анализом полученных данных.

Читать далее

Конструкторы, деструкторы, операторы — частые практики при программировании на C++

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров8K

Данная статья служит шпаргалкой при написании классов с различными перегрузками операторов на примере тривиального класса строки (и ещё нескольких). Описанное здесь позволяет избежать копирования кода из одного конструктора или оператора в другой, что значительно снижает вероятность появления ошибок, но может привести к незначительному уменьшению производительности.

Читать далее

Сериализация данных в C++ с библиотекой Cereal

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров4.9K

Привет, Хабр!

Сегодня рассмотрим библиотеку Cereal в C++, которая позволяет сохранять и загружать состояние объектов, не теряя производительности.

Cereal — это заголовочная библиотека для C++, предназначенная для сериализации данных. Она поддерживает XML и JSON. Помимо этого поддерживает практически все стандартные типы данных в C++ и имеет инструменты для работы с пользовательскими типами. В отличие от, например, библиотек Boost, Cereal не требует сложных настроек и имеет интуитивно понятный синтаксис, знакомый юзерам Boost.

Читать далее

Как сделать пароль менеджер

Уровень сложностиПростой
Время на прочтение55 мин
Количество просмотров21K

В наше время иррационализма, утечек данных с серверов, постоянного внедрения рекламы тут и там, мошенничества, неумелого программирования, приложения начинают не помогать, а раздражать, а то и вовсе могут нанести вред. Поэтому в купе с несправедливостью и желанием сделать всё самому, в этой статье, мне охота показать, как легко сделать одно из бытовых приложений своими руками, на примере приложения хранения паролей, с помощью текстового файла, шифрования и облака.

Читать далее

Rust: за пределами синтаксиса. Обретение просветления в неожиданных местах

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров7.2K

Я ненавижу C++. Обычно мне нравится программировать, но каждый проект на C++, за который я брался, казался мне утомительной рутиной. В январе 2023 года я решил изучить Rust, чтобы иметь возможность сказать, что знаю язык системного программирования, который мне действительно хотелось бы использовать.

Первая стабильная версия Rust вышла в 2015 году, и с тех пор, начиная с 2016 года, он ежегодно признается самым любимым языком в ежегодном опросе разработчиков на Stack Overflow (теперь, в 2023 году, это называется "Востребованный"). Почему же разработчики, попробовав Rust, не могут перестать его использовать? В мире разрекламированных преемников C/C++ Rust, похоже, выходит на первое место. Как получилось, что язык, который появился на основной сцене всего в прошлом десятилетии, стал таким популярным?

Читать далее

Ближайшие события

Как настроить библиотеку SFML C++ в Visual Studio 2022: статическая компоновка

Время на прочтение3 мин
Количество просмотров9.4K

В этой статье рассказывается, как настроить ваши проекты SFML С++ со статической компоновкой используя интегрированную среду разработки программного обеспечения Visual Studio.

Установка SFML библиотеки

Загрузите библиотеку SFML c официального сайта. Выбираем самую последнюю версию софта, на сегодня это версия SFML 2.6.1.

Читать далее

Фаззинг библиотек

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров3.5K

Ещё недавно, как я начал изучать веб хакинг, я счёл интересным занятие исследовать Linux и Windows на предмет бинарных уязвимостей. Хотя легально заработать в одиночку хакером у нас в России я думаю можно только веб хакингом, я всё равно хочу изучать все интересующие аспекты атакующей и защищающей стороны. Кто знает, вдруг я когда-нибудь буду в red team. Ну а пока я просто грызу гранит науки.

Слегка поразмыслив над решением задачи, я определил что нужно для осуществления моей проблемы. Я не знаю как другие проводят фаззинг библиотек, у которых нет исходных текстов, но додумался до одного варианта. Далее будут два примера для Linux и Windows.

Читать далее

Соединяем Flutter, Firebase и ESP32 в единую систему

Уровень сложностиСложный
Время на прочтение15 мин
Количество просмотров8.5K

Всем привет! Это Мурат Насиров, Flutter-разработчик в Friflex. Мы разрабатываем высоконагруженные мобильные приложения для бизнеса и специализируемся на Flutter. 

Сегодня расскажу, как использовать микроконтроллер ESP32 в связке с Flutter-приложением. В качестве примера покажу, как снимать показания температуры и влажности с помощью датчика DHT11 и передавать эти данные через Firebase Realtime Database в приложение.

Читать далее

Установка GCC в сборке MinGW

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров42K

Установка коллекции компиляторов GCC (GNU Compilers Collection) в Windows и первичная настройка для дальнейшей работы.

Читать далее

Применение контейнеров и алгоритмов STL в C++

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров28K

Привет, Хабр!

STL — это коллекция компонентов, предназначенных для работы с данными. Включает в себя: контейнеры, алгоритмы, итераторы и функциональные объекты, STL в общем своего рода швейцарский ножик в этом деле. Контейнеры помогают управлять коллекциями данных различных типов, алгоритмы предоставляют общие методы для их обработки, итераторы служат связующим звеном между контейнерами и алгоритмами, а функциональные объекты позволяют гибко настраивать поведение стандартных операций.

Рассмотрим подробнее.

Читать далее

Zoom в Qt виджете

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров5.7K

Пошаговая инструкция по созданию отрисовываемого Qt-виджета с возможностью зума и навигации для начинающих.

Читать далее

Психический симулятор или Triumvirate of Hearts

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров2.2K

Решил вот поделится своей игрой и своими исследованиями в области психологии.

В RPG играх (например S.T.A.L.K.E.R.) есть система отношения созданная специально для взаимодействия c NPC. И тут я подумал: а что если использовать эту систему, чтобы построить полноценный психический симулятор, где можно манипулировать людьми для достижения определённого результата. В качестве простого примера я выбрал любовные треугольники: в них мужчины (или женщины) конкурируют за возлюбленн(ой/ого) и используют различные методы для расположения к себе своего партнёра. Меня они всегда интересовали потому, что это своего рода испытания для людей и почему бы не сделать игру-стратегию по ним (спасибо нейросети за гениальное название!)

Узнать больше

Вклад авторов