Change History (3)

comment:1 Changed 3 years ago by Святослав Власов

Type: ожидается проверкаожидаются исправления

Такое решение приведет к двойной аллокации и копированию памяти, если new_size > 2 * _cp, а этого мы не хотим.:

this->reserve(2 * _cp);
this->reserve(new_size);

И непонятно, зачем мы в MyVector::resize копируем элементы дважды (первый раз в reserve а второй раз в resize.

И в целом у тебя resize не работает. v.size() возвращает одно и то же как до v.resize(...), так и после.

MyVector::insert должен работать без выделения дополнительной памяти, если capacity хватает.

У тебя очень много копипасты в reserve, resize, push_back и insert. Подумай, как можно побольше переиспользовать код.

Ловишь сегфолт на вот таком тесте:

> resize 6
> insert 5 5

comment:2 Changed 3 years ago by morozov.nikita

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:3 Changed 3 years ago by Святослав Власов

Resolution: задача сдана
Status: assignedclosed

По корректности:

  1. В resize, если у тебя _sz < new_size < _cp, то произойдет выделение новой памяти и копирование, а это ни к чему.

По стилю:

  1. В функции MyVector::push_back строчки 83-85 (те, что после create_new_data) можно просто удалить, они лишние
  2. Функция create_new_data мне не нравится. Во-первых, она лишняя, её код можно поместить в MyVector::reserve и использовать её, а, во-вторых, вспомогательные функции лучше помещать внутрь класса и делать приватными.

В остальном всё хорошо -- 9/10.

Note: See TracTickets for help on using tickets.