Opened 4 years ago
Closed 4 years ago
#946 closed ожидается проверка (задача сдана)
HW #3
Reported by: | Roman Venediktov | Owned by: | Дмитрий Свиридкин |
---|---|---|---|
Component: | HW #3 (Huffman) | Version: | 3.0 |
Keywords: | Cc: |
Description
1 Там в одном месте Huffman.cpp есть закоменнтированная попытка использовать std::copy с моим итератором. Я не понимаю, почему оно не работает
2 Почему я не могу привести std::istreambuf_iterator<char> к std::iterator<std::input_iterator_tag, char>&? Он же наследуется от него. И так я мог бы принимать в методах Huffman более общий класс
Change History (5)
comment:1 Changed 4 years ago by
comment:2 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to Roman Venediktov |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:3 follow-up: 4 Changed 4 years ago by
Owner: | changed from Roman Venediktov to Дмитрий Свиридкин |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 2.0 → 3.0 |
1 Мне тоже везде стоило принимать итераторы по темплейтам?
2 Если считать, что это MVC для бедных, то main -- controller и он, казалось бы, должен держать у себя объявления всего, что нужно для взамодействия с ним.
3 Теперь большинство методов не публичные.
4 Зачем тестить именно код символа? Если я когда-нибудь поменяю, в какую сторону -- 0, в какую -- 1, то тесты перестанут проходиться, но программа же корректно работает...
5 Я не смог понять, как делать using для нужных тэгов...
comment:4 Changed 4 years ago by
Replying to Roman Venediktov:
1 Мне тоже везде стоило принимать итераторы по темплейтам?
Если хотелось универсального алгоритма, работающего с любым источником данных -- да.
2 Если считать, что это MVC для бедных, то main -- controller и он, казалось бы, должен держать у себя объявления всего, что нужно для взамодействия с ним.
Слишком для бедных.
4 Зачем тестить именно код символа? Если я когда-нибудь поменяю, в какую сторону -- 0, в какую -- 1, то тесты перестанут проходиться, но программа же корректно работает...
Одно из назначений тестов как раз в том, чтоб оперативно увидеть, что вы что-то кардинально поменяли. И либо изменить тесты, либо понять, что вы что-то сломали.
5 Я не смог понять, как делать using для нужных тэгов...
class MyIterator { public: using iterator_category = std::forward_iterator_tag; using value_type = int; .... }
comment:5 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
==277589== 40 bytes in 1 blocks are definitely lost in loss record 1 of 4 ==277589== at 0x483C583: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==277589== by 0x143B08: _DOCTEST_ANON_FUNC_7() (in /home/dmis/DATA/WORKSPACE/cpp-labs/hw_03/check/hw_03/test_hw_03) ==277589== by 0x1246CD: doctest::Context::run() (in /home/dmis/DATA/WORKSPACE/cpp-labs/hw_03/check/hw_03/test_hw_03) ==277589== by 0x111022: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/hw_03/check/hw_03/test_hw_03) ==277589== ==277589== 40 bytes in 1 blocks are definitely lost in loss record 2 of 4 ==277589== at 0x483C583: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==277589== by 0x143C78: _DOCTEST_ANON_FUNC_7() (in /home/dmis/DATA/WORKSPACE/cpp-labs/hw_03/check/hw_03/test_hw_03) ==277589== by 0x1246CD: doctest::Context::run() (in /home/dmis/DATA/WORKSPACE/cpp-labs/hw_03/check/hw_03/test_hw_03) ==277589== by 0x111022: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/hw_03/check/hw_03/test_hw_03) ==277589== ==277589== 48 bytes in 1 blocks are definitely lost in loss record 3 of 4 ==277589== at 0x483C583: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==277589== by 0x143985: _DOCTEST_ANON_FUNC_7() (in /home/dmis/DATA/WORKSPACE/cpp-labs/hw_03/check/hw_03/test_hw_03) ==277589== by 0x1246CD: doctest::Context::run() (in /home/dmis/DATA/WORKSPACE/cpp-labs/hw_03/check/hw_03/test_hw_03) ==277589== by 0x111022: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/hw_03/check/hw_03/test_hw_03) ==277589== ==277589== 120 bytes in 3 blocks are definitely lost in loss record 4 of 4 ==277589== at 0x483C583: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==277589== by 0x142DE8: _DOCTEST_ANON_FUNC_2() (in /home/dmis/DATA/WORKSPACE/cpp-labs/hw_03/check/hw_03/test_hw_03) ==277589== by 0x1246CD: doctest::Context::run() (in /home/dmis/DATA/WORKSPACE/cpp-labs/hw_03/check/hw_03/test_hw_03) ==277589== by 0x111022: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/hw_03/check/hw_03/test_hw_03) ==277589==
Статистику выводите потоянно с ошибкой в 1 байт.
count_symbols(std::istreambuf_iterator<char> &input)
лучше пару итераторов. И принимать по (неконстантной) ссылке итератор не нужно.
template<typename T> struct two_queues
ОЧень странное название для класса, ведущего себя как одна очередь с приоритетами.
8.5 + 7.5 + 5 + 7.5
Replying to Roman Venediktov:
Не работает из-за того, что итератор, хранит состояние целого массива и позицию в нем и копируется внутрь std::copy.
Если итератор будет хранить не состояние, а ссылку на состояние, скорее всего, будет работать.
Начиная с C++17 он не наследуется от std::iterator. std::iterator будет удален из стандартной библиотеки. Вместо него будут концепты.
Основная идея в том, что все алгоритмы над итераторами -- шаблонные функции. Им не нужен интерфейс базового класса, а только соответсвие какому-то концепту. Ну и std::iterator с его кучей параметров признан неудобным.
С пустым файлом не работает:
Файл из 16 букв 'a':
статистика сжатия:
Статистика разжатия:
Откуда 11й байт?
флаги --file --output ?
Откуда пошло такое странное выранивание doctest макросов? По два дополнительных отступа?
А зачем нужнм main.h? Две структуры в нем должны относится к CLI
Одна относится к архиватору.
read_flag можно сделать статической функцией в CLI.cpp. Без привязки к классу. Аналогично
struct CLI::cli_request
. Они никак не относятся к интерфейсу класса и из заголовка их можно убрать.Давайте аргументам имена.
Вот что это за параметры? А методы публичные.
std::ios_base::failure вроде унаследован от std::exception.
И ненулевой код вернуть надо бы.
не надо от этого мусора наследоваться.
сделайте using нужных тегов и типов и все.
Надо потестить значения кодов для разных символов (у вас только длины проверяются)
Для I/O оберток и парсера аргументов тоже нужны тесты.
6 + 5 + 5 + 7.5