Opened 4 years ago

Closed 4 years ago

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

WW_linq

Reported by: tarasov.denis Owned by: Egor Suvorov
Component: WW_linq Version: 3.0
Keywords: Cc:

Description

Кажется, что криво, но лучше не получилось

Change History (10)

comment:1 Changed 4 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to tarasov.denis

Корректность 6/7: падает until на пустом входе.

Стиль 1/3:

  • Категорически не хватает слов explicit (конструктор, оператор), final (для классов), noexcept, rvalue-ref-qualification для методов.
  • copy_to лучше делать напрямую, а не через вектор. Не станет сильно больше кода к тому же. При желании можно вообще to_vector выразить через copy_to+back_inserter.
  • operator bool() — это практически самое неочевидное место, чтобы запихать туда сдвиг итератора в drop_enumerator. То есть если создали итератор, то надо первым делом вызывать bool, иначе ответ неправильный. Автотестами это, конечно, не проверить (интерфейс формально этот никуда не вылезает), но выглядит очень жутко. Плюс pos_ не нужен, хватит count_.
  • В until_eq_enumerator на каждый чих происходит сравнение элемента.
  • where_eq/until_eq можно выразить через where/until.

comment:2 Changed 4 years ago by Egor Suvorov

Resolution: задача сдана
Status: assignedclosed
Type: ожидается проверкаожидаются исправления

comment:3 Changed 4 years ago by Egor Suvorov

P.S. Ещё не хватает всяких запретов на копирование/присваивание enumerator. И даже move можно запретить с C++17. И стоит сделать деструктор enumerator виртуальным — это в этом задании на корректность не влияет, но класс-то полиморфный.

comment:4 Changed 4 years ago by tarasov.denis

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

Я не очень понял что делать с запретами на копирование, присваивание и перемещение, без них не получается обойтись, как минимум from требует копирование.

comment:5 Changed 4 years ago by tarasov.denis

Owner: changed from tarasov.denis to Egor Suvorov
Status: reopenedassigned

comment:6 Changed 4 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to tarasov.denis
Type: ожидается проверкаожидаются исправления

Корректность почти есть (6.5/7): многовато noexcept.

Стиль 2.5/3:

  • Всё ещё не хватает слов explicit для конструкторов.
  • noexcept на методах, которые могут вызвать произвольные пользовательские функции (даже пользовательский конструктор перемещения) — это нехорошо.
  • to_vector можно сделать через copy_to+back_inserter
  • edge_ --> что-нибудь другое. Это не ребро и не абстрактная "граница".

comment:7 Changed 4 years ago by tarasov.denis

Owner: changed from tarasov.denis to Egor Suvorov
Type: ожидаются исправленияожидается проверка
Version: 2.03.0

comment:8 Changed 4 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to tarasov.denis
Type: ожидается проверкаожидаются исправления

По стилю 2.95/3; стоит имена taken_/limit_/count между собой как-то синхронизировать. Я бы, возможно, вообще избавился от двух переменных и сделал одну.

comment:9 Changed 4 years ago by tarasov.denis

Owner: changed from tarasov.denis to Egor Suvorov
Type: ожидаются исправленияожидается проверка

comment:10 Changed 4 years ago by Egor Suvorov

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

Ура!

Note: See TracTickets for help on using tickets.