Opened 3 years ago

Closed 3 years ago

#531 closed ожидается проверка (задача сдана)

WW_vector Kuznec lab_11

Reported by: Anton Owned by: Антон Филатов
Component: WW_vector Version: 3.0
Keywords: Cc:

Description


Change History (6)

comment:1 Changed 3 years ago by Антон Филатов

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

две ошибки при компиляции:
1) забыли include iostream в хедер
2)

include/my_vector_impl.h:12:27: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
         for (int i = 0; i < size_; i++)
                         ~~^~~~~~~

По тестам всё тоже не очень здорово.
К сожалению с сегфолтом падают все тесты на product, поэтому я не могу сказать, есть ли какие-то ещё ошибки в тестах.
А с сегфолтом они падают, скорее всего из-за вашего оператора new.
В ваш класс Product добавьте деструктор, который делает delete name_;
А в main напишите так: containers::my_vector<product::Product> vec;

Сразу могу указать на такие ошибки:

  • пустой вектор надо делать от capacity 1
  • не хотите ли попробовать сделать swap trick в присваивании?
  • тот факт, что вы не вызываете placement new нигде тоже немного настораживает
  • в задании не зря написано, что если есть дефолтный конструктор, то становится можно делать resize. Ваш resize дейолтный конструктор не дёргает

Пока 2/10 за то, что верна общая логика

comment:2 Changed 3 years ago by Anton

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

1) Добавил iostream в хедер (хотя у меня и без него компилировалось)
2) Тесты сейчас вроде бы не должны падать
3) Пустой вектор делаю от capacity 1
4) Swap trick
5) C resize-ом сейчас тоже вроде все нормально

Ошибки valgrind пока пофиксить не смог.

comment:3 Changed 3 years ago by Anton

Ошибки valgrind пофиксил.

comment:4 Changed 3 years ago by Антон Филатов

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

Что-то у вас reserve не компилируется для класса без дефолтного конструктора.
То есть хорошо, что вы выделили отдельную функцию для шаблона с дефолтным конструктором и без него, но вообще говоря обычный reserve должен работать для всех классов - и без дефолтного конструктора тоже.

Если выпилить тесты для классов без дефолтного конструктора, то ломаются следующие тесты:

my_vector<T> vec(10);
    assert(vec.size() == 10);
    assert(vec.capacity() == 16);
    assert(!vec.empty());

    for(size_t i = 0; i < vec.size(); ++i) {
        assert(vec[i] == T());
    }

А также на копирование, на reserve и на resize
Эти тесты довольно длинные. Я не очень хочу сюда простыню копипастить. Если сами ошибку не найдёте - пишите, я скину, на чём у вас ломается

по стилю, кажется, всё норм

6,5/10

comment:5 Changed 3 years ago by Anton

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

comment:6 Changed 3 years ago by Антон Филатов

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

Тесты пройдены.
А у вас и в прошлой посылке была вечная копипаста (array_ + i)->~T();?
Просто кажется, что можно clear выразить через pop_back, а потом везде юзать именно clear

9,5/10

Note: See TracTickets for help on using tickets.