В этом задании вам необходимо реализовать простой аналог класса 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
и применять оптимизацию, когда это не противоречит гарантиям метода.