Change History (5)

comment:1 Changed 4 years ago by yakovlev.aleksandr

коммит сделал а тикет создать забыл, извините :(

comment:2 Changed 4 years ago by Артур Гулецкий (huletski)

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

Замечания (основные/очевидные; после исправлений, возможно, появятся новые):

  • Решение собирается с warning'ом:
    {build}[2086]$ make
    Scanning dependencies of target lab_12
    [ 33%] Building CXX object CMakeFiles/lab_12.dir/src/main.cpp.o
    [ 66%] Building CXX object CMakeFiles/lab_12.dir/src/Product.cpp.o
    /home/hfx/dvl/cpp19/yakovlev.aleksandr/lab_12/src/Product.cpp: In member function ‘product::Product& product::Product::operator=(product::Product)’:
    /home/hfx/dvl/cpp19/yakovlev.aleksandr/lab_12/src/Product.cpp:32:1: warning: no return statement in function returning non-void [-Wreturn-type]
       31 |     swap(other);
      +++ |+         return *this;
       32 | }
          | ^
    [100%] Linking CXX executable lab_12
    [100%] Built target lab_12
    

my_vector.h

  • имя namespace'a должно быть my_vector;
  • noexcept у методов не хватает (e.g. empty);
  • 49: stack_holder? какое отношение "stack_" имеет к классу?
  • 53: отступы.

my_vector(_impl).h

  • не подключены заголовки для std::move, std::min и других функций классов -> код не компилируется с кастомным main-ом. В этот раз я исправлю локально, на следующих итерациях при обнаружении этой же ошибки проверка будет закончена;
  • 21: отступы;
  • не используются move'ы, где могли бы (e.g. resize);
  • дублирование логики "скопировать все элементы в интервале в неинициализированную память", "инициализировать элементы в интервале при помощи конструктора по умолчанию";
  • не выполняется требование "Методы и конструкторы, которые увеличивают capacity, делают его равным минимальной достаточной степени двойки.".

Баллы: 2.5, чините capacity, добавляйте move и нужные #include.

Last edited 4 years ago by Артур Гулецкий (huletski) (previous) (diff)

comment:3 Changed 4 years ago by yakovlev.aleksandr

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

вроде пофиксил (насчёт инклюдов -- у меня почему-то всё компилируется без них и я не знаю как это отключить, так что возможно есть лишние...)

comment:4 Changed 4 years ago by Артур Гулецкий (huletski)

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

вроде пофиксил (насчёт инклюдов -- у меня почему-то всё компилируется без них и я не знаю как это отключить, так что возможно есть лишние...)

У меня тоже компилируется теперь. А вы в старой версии попробуйте в main.cpp my_vector.h первым инклудом подключить, должно сломаться.

Замечания:

my_vector.h

  • если у Т конструктор по умолчанию выделяет ресурсы, то такой код приводит к утечке памяти:
    my_vector::my_vector<Product> vec(5);
    
  • capacity должна устанавливаться равной минимальной достаточной степени двойки, такой код падает:
        my_vector::my_vector<int> v;
        v.reserve(8);
        assert(v.capacity() == 8);
    
  • 69: а что с move-версиями?
  • 86: опечатка в имени;

my_vector_impl.h

  • 19: отступы;
  • 57: resize не должен уменьшать размер capacity;
  • 58: вызываются избыточные конструкторы по умолчанию, что плохо, учитывая, что T может быть любым (производительность). Нужно чинить (fill для части массива);
  • 60: а можно ли move сделать? Если да, то почему, если нет, то почему. Ответ напишите в комментарии.
  • 82: подумайте как минимизировать дублирование логики метода, учитывая, что move-версии ctop, op= T по условию noexcept и тот факт, что в качестве аргумента принимается копия элемента. Обратите внимание, что v.push_back(v[i]) должно работать даже в случае resize'a.

Баллы: 3.5, доделывайте.

comment:5 Changed 4 years ago by Артур Гулецкий (huletski)

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

Дедлайн.

Note: See TracTickets for help on using tickets.