В этом задании вам необходимо реализовать простой аналог класса std::vector.
Вектор принимает один шаблонный параметр T — тип хранимых элементов.
Note
std::vectorтакже принимает необязательным вторым шаблонным параметром тип используемого аллокатора, но вам таким заниматься не надо — достаточно использовать операторыnew/delete.
В vector.h возле каждого метода, который необходимо реализовать, указаны требуемые гарантии безопасности исключений и вычислительная сложность.
Обратите внимание, что несмотря на то, что стандарт определяет
std::vector::shrink_to_fit как "non-binding request" (т.е. допускается
реализация, которая ничего не делает), ваша версия этого метода обязана
уменьшать capacity, если это имеет смысл.
Деструкторы элементов должны вызываться в порядке, обратном порядку их вставки.
Для обеспечения строгой гарантии безопасности исключений, в зависимости от того, помечен ли move-конструктор T спецификатором noexcept, может потребоваться вместо него вызывать конструктор копирования. Чтобы не копировать лишний раз, предлагается воспользоваться конструкцией if constexpr и оператором noexcept и применять оптимизацию, когда это не противоречит гарантиям метода.