8000 GitHub - ivan0sokin/vector-task: MoveConstructible & !MoveAssignable
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

ivan0sokin/vector-task

 
 

Repository files navigation

Vector

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

About

MoveConstructible & !MoveAssignable

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 80.5%
  • CMake 11.3%
  • Shell 8.2%
0