Skip to content

StepAP221/cpp-advanced-tasks

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Пылаев Степан 4341 ФКТИ C++ OOP: Advanced Tasks Solution

Решение доп заданий по курсу C++ (ООП)

В репозитории представлены решения трех задач: генератор псевдослучайных чисел, работа с маской и менеджер статической памяти. Код написан на стандарте C++17.

1. SimpleRNG (Генератор)

Реализован класс генератора на основе линейного конгруэнтного метода: X[N+1] = (a * X[N] + c) % m.

  • Поскольку коэффициенты вещественные, для вычисления остатка от деления используется функция std::fmod.
  • Реализован InputIterator, что позволяет использовать генератор в циклах range-based и алгоритмах STL.
  • Метод end(eps) возвращает итератор, который останавливает перебор, когда текущее значение генератора совпадает с начальным (с заданной точностью eps). Это предотвращает бесконечные циклы.

2. Mask (Работа с маской)

Шаблонный класс Mask<N>, где N — размер маски.

  • Конструктор принимает переменное количество аргументов, проверяя их количество (static_assert) и значения (0 или 1).
  • Метод slice: модифицирует переданный контейнер "на месте". Использует два итератора (чтение/запись) для сдвига элементов, соответствующих единице в маске, в начало контейнера. Лишние элементы удаляются через resize.
  • Методы transform и slice_and_transform создают новые контейнеры, применяя функцию-преобразователь к выбранным элементам.

3. MemReserver (Менеджер памяти)

Класс, реализующий выделение памяти под объекты без использования динамической кучи.

  • Память выделяется статически в виде массива std::byte. Используется спецификатор alignas(T) для корректного выравнивания.
  • Создание объектов (create) происходит с помощью placement new. Аргументы конструктора передаются через std::forward.
  • Удаление (delete_obj) реализовано через явный вызов деструктора.
  • Метод position определяет индекс объекта путем вычисления смещения его адреса относительно начала буфера. Добавлены проверки на корректность указателя.

Сборка и запуск

g++ main.cpp -std=c++17 -o solution
./solution

About

4341_Пылаев_Степан ФКТИ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages