§ 4. Клаcc вектор
Задания
01При выполнении заданий должны быть соблюдены следующие условия.
- Сборка кода должна быть сделана с помощью Meson.
- Тесты должны быть прописаны в Meson и запускаться с помощью
meson test. - Все нижеперечисленные задания должны быть в одном проекте Meson.
- Структура проекта Meson должна быть похожа на следующую.
src └── myproject # название произвольное ├── vector.hh # основной код ├── vector_test.cc # код модульных тестов └── ...
Код тестов в отдельном файле. Все файлы находятся в директории с названием проекта. - Включение заголовочных файлов в код всегда делается с указанием имени проекта:
#include <myproject/vector.hh>
- Создайте упрощенный класс
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&&).
std::unique_ptrможно). Оператор присваивания и конструкторы должны быть реализованы с помощью методаswap. Класс не должен использовать полеcapacityили аналогичное (я приму и с этим полем, но тогда вы должны корректно реализовать внутреннюю логику класса). - Проверьте корректность работы класса
Vector, заменив в модульных тестахstd::vectorиз предыдущего задания на него. Для этого скопируйте код модульных тестов в отдельный файл, чтобы код предыдущих заданий не изменился. - Проверьте, что в вашем классе отсутствуют ошибки работы с памятью. Для этого соберите проект с флагом
-Db_sanitize=addressи запустите тесты:meson configure -Db_sanitize=address ninja test meson configure -Db_sanitize=none # отключение санитайзера
Ссылки
- Описание методов
std::vector: ru.cppreference.com. - Реализация
std::vectorв стандартной библиотеке компилятора GCC:/usr/include/c++/10/bits/stl_vector.h. Этот файл есть в любом дистрибутиве Linux, в котором установлен компилятор, но путь может отличаться.