Opened 4 years ago
Closed 4 years ago
#1000 closed ожидается проверка (задача сдана)
WW #15
Reported by: | Filippov Denis | Owned by: | Egor Suvorov |
---|---|---|---|
Component: | WW_linq | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (6)
comment:1 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 4 years ago by
Resolution: | задача сдана |
---|---|
Status: | closed → reopened |
Договорились в телеграмме о дорешке. Дедлайн 3 июня в 22:59
comment:3 Changed 4 years ago by
Status: | reopened → assigned |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
comment:4 Changed 4 years ago by
Owner: | changed from Egor Suvorov to Filippov Denis |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Корректность 7/7.
Стиль 1.25/3:
- Не хватает rvalue-ref-qualifier у методов.
- Методы в
enumerator
лучше сделать чисто виртуальными, а не выдавать какие-то бесполезные реализации по умолчанию. !(_isCompleted |= !_parent)
— не хочу это читать. Выглядит ужасно, плюс зачем-то мутирует_isCompleted
лениво и из-за этого надо его делатьmutable
. Настолько лениво не надо. Лучше переписатьuntil_enumerator
с нуля, будет чище. Это основное ограничение на набирание баллов.- Кажется, что ещё пара методов может быть
noexcept
. back_inserter
не надо передавать руками тип, он сам выведет.otherTypeParent
— странное имя.left
-->remaining
until_enumerator::set()
— неясное название. Аналогично вwhere_enumerator
.
comment:5 Changed 4 years ago by
Owner: | changed from Filippov Denis to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 2.0 → 3.0 |
comment:6 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Корректность 7/7.
Стиль 2.25/3:
defaultElem
не используетсяcopy_to
*(it++)
— скобки не нужны.- И вообще тут как-то несимметрично увеличиваются указатели
- Должен быть
&&
until
/until_eq
/where_neq
тоже могут бытьnoexcept
.where
, скорее всего, тоже, если move-конструкторfunc
не кидается.range_enumerator
хорошо бы мувать итераторы, а не копировать. Они, конечно, маленькие, но это обобщённый код — мало ли.until_enumerator::findNext()
— можно упростить, если убратьconst auto &cur
. Минус ссылка, минус иф.
Note: See
TracTickets for help on using
tickets.
Корректность 4/7:
until
работает в другую сторону: оно должно обрываться при выполненном условии. Но если исправить, то начинают падать сэмплы. В общем, что-то нечисто.select
использует moved-from функтор.Стиль 1/3:
explicit
у конструктора и оператора.noexcept
. Исключения могут кинуть как минимум: перевыделение вектора, любые операции с элементами, пользовательские функции...enumerator
стоит запретить копирование и даже перемещение (потому что в C++17 появился copy elision).until_eq
/where_neq
зря захватывают по значению,std::back_insert_iterator
-->back_inserter
parent
вenumerator
— плохая идея, как минимум вselect_enumerator
иrange_enumerator
он весит мёртвым неиспользуемым грузом. А вselect_enumerator
вообще можно опечататься. Если уж хотите вынести, сделайте промежуточный класс вродеenumerator_with_parent
. А ещё не стоит делатьusing _parent
в публичной секции, это деталь реализации всё-таки.enumerator
полиморфный, стоит сделать виртуальный деструктор. Тут на корректность не влияет, но вообще стоит.throwFirstElems()
-->drop
, по названию класса. Аналогично сsetCurElem()
— лучше такие штуки назвать единообразно.take_enumerator
— лучше неcurElemNum
/count
, а один инт "сколько осталось"_isPredicateFailed
— это странная половина условия "жив ли итератор". Она имеет смысл только в сочетании с реализацииsetCurElem
иoperator bool()
. Лучше обобщить и упростить инвариант класса: например,_isCompleted
.until_enumerator
.