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