§ 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, в котором установлен компилятор, но путь может отличаться.