§ 4. Клаcc вектор

Задания

01При выполнении заданий должны быть соблюдены следующие условия.

  1. Создайте упрощенный класс Vector по образу и подобию std::vector. Класс должен иметь следующие методы и конструкторы.
    • push_back(const T&),
    • push_back(T&&),
    • pop_back, erase,
    • begin, end, size,
    • swap (а также функцию swap вне класса для совместимости с STL алгоритмами),
    • Vector(const Vector&),
    • Vector(Vector&&),
    • Vector& operator=(const Vector&),
    • Vector& operator=(Vector&&).
    Класс должен быть шаблоном, единственный аргумент которого является типом элемента контейнера. Класс не должен использовать другие контейнеры STL (использовать std::unique_ptr можно). Оператор присваивания и конструкторы должны быть реализованы с помощью метода swap. Класс не должен использовать поле capacity или аналогичное (я приму и с этим полем, но тогда вы должны корректно реализовать внутреннюю логику класса).
  2. Проверьте корректность работы класса Vector, заменив в модульных тестах std::vector из предыдущего задания на него. Для этого скопируйте код модульных тестов в отдельный файл, чтобы код предыдущих заданий не изменился.
  3. Проверьте, что в вашем классе отсутствуют ошибки работы с памятью. Для этого соберите проект с флагом -Db_sanitize=address и запустите тесты:
    meson configure -Db_sanitize=address
    ninja test
    meson configure -Db_sanitize=none # отключение санитайзера
    

Ссылки