Opened 4 years ago

Closed 4 years ago

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

WW #13

Reported by: Gleb Marin Owned by: Sokolov Viacheslav
Component: WW_array Version: 2.0
Keywords: Cc:

Description


Change History (3)

comment:1 Changed 4 years ago by Sokolov Viacheslav

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

Не хватает инклуда:
cstdint

19 constexpr T &operator[](std::size_t index) const noexcept;
этот и аналогичные методы не компилируется. Программа собирается, потому что этот метод не участвует в компиляции. Нужно написать тест, покрывающий вызовы const-версий.

13 throw std::out_of_range{std::to_string(index)};

лучше сделать более user-friendly сообщение, чтобы из него можно было лучше понять, в чем именно ошибка. Из описания "3" мало что понятно.

52 template <typename T, std::size_t N>
53 void my_array<T, N>::fill(T val)
54 {
55 for (std::size_t i = 0; i < N; ++i)
56 {
57 _memory[i] = val;
58 }
59 }

с такой реазилацией лучше принимать const T& val, поскольку так на одну операцию меньше

29 constexpr T &my_array<T, N>::operator[](std::size_t index) noexcept
30 {
31 return _memory[index];
32 }

assert все же стоит добавить

42 my_array_bool_proxy &operator=(const my_array_bool_proxy &other) noexcept;

с rvalue-версией стоит что-нибудь явно сделать

В текущей реализации a[i] = a[i + 1] работает неправльно в bool-специализации. Напишите на это тест.

45 operator bool() const;
46 bool operator==(const my_array_bool_proxy &other);
47 bool operator==(bool);

везде const noexcept

53 constexpr my_array_bool_proxy at(std::size_t index) const;

какая мотивация возвращать не bool?

60 void fill(bool val);

noexcept

63 std::uint8_t _memory[(N + BITS_PER_BYTE - 1) / BITS_PER_BYTE];

может переполниться при большом N

63 : byte(proxy_byte), bit_index(proxy_bit_index) {}

assert(bit_index < 8)

82 return *byte & (1 << bit_index);

signed и unsigned битовые операции потенциально отличаются. Лучше работать в unsigned.

168 const std::uint8_t multiple_values = static_cast<std::uint8_t>(val ? (1LL << BITS_PER_BYTE) - 1 : 0);
long long здесь не нужен. Лучше всего просто 1u.

169 for (std::size_t i = 0; i < n_bytes; ++i)
170 {
171 _memory[i] = multiple_values;
172 }
memset потенциально эффективнее

comment:2 Changed 4 years ago by Gleb Marin

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

comment:3 Changed 4 years ago by Sokolov Viacheslav

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

69 lab_13::my_array<int, 10> bool_array;
он все же не bool

131 throw std::out_of_range{std::to_string(index)};
было бы лучше, если бы сообщение специализации тоже было осмысленным

Note: See TracTickets for help on using tickets.