Opened 4 years ago
Closed 4 years ago
#940 closed ожидаются исправления (задача сдана)
HW #3
Reported by: | zhemchuzhina.elizaveta | Owned by: | zhemchuzhina.elizaveta |
---|---|---|---|
Component: | HW #3 (Huffman) | Version: | 1.0 |
Keywords: | Cc: |
Description
Change History (2)
comment:1 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to zhemchuzhina.elizaveta |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Note: See
TracTickets for help on using
tickets.
Будет UB.
Парсер аргументов командной строки не должен открывать файлы запускать архиватор. Каждый объект должен делать ровно одну задачу, для которой он создан.
Почему бы не использовать конструктор *fstream? Не надо разрывать объявление и инициализацию.
Зафейлиться при открытии могут оба потока.
У конструкторов потоков есть перегрузка, принимающая string. Доставать сишную строку нет надобности.
бинырные файлы будут поломаны под Windows
На пустом файле:
Test failed -- invalid compressed size reported: 1 instead of 0
Файл действительно получился размера 0. Неверный вывод статистики.
alg.fill_codes_heap(codes_heap);
почему бы этому методу не вернуть новую очередь, чем заполнять переданную? Возвращать одно значение более очевидное решщение, чем модифицировать единственный аргументДополнительный отступ перед каждым CHECK? Интересный стиль.
Строчка длиной в 262 символов в cmake... Лайфхак: делайте перенос строки
Лучше группировать системные заголовки отдельно от ваших.
У вас все типы с больший буквы, но
struct frequency
Архиватор лучше отделить от разархиватора. Первому нужна только таблица кодов. Второму только дерево.
Для таблицы кодов стоит завести свой класс/структуру и сделать конструктор для построения из дерева. Аналогично для дерева.
У вас нет тестов отдельно на построение дерева.
Этот метод публичный:
Huffman::HuffmanNode* Huffman::HuffmanTree::add_node(const std::vector<bool> &code)
А что будет, если добавят код, являющийся префиксом одного из существующих?
(например, архив испортился и какие-то биты побились?) Здесь никак не учитывается, что для корректности каждая новая добавленная цепочка должна заканчиваться листом дерева. И нельзя добавлять новые вершины к уже полученным ранее листьям.
Пляски с priority_queue точно не нужно делать публичными методами. Их надо инкапсулировать под простым интерфейсом: таблица частот на входе -> дерево на выходе.
Размещайте публичные поля и методы перед приватынми.
Приватыне кишки никому не нужны.
8 + 6 + 1.5 + 5