Opened 4 years ago
Closed 4 years ago
#896 closed ожидается проверка (задача сдана)
WW #13
Reported by: | Brilliantov Kirill | Owned by: | Sokolov Viacheslav |
---|---|---|---|
Component: | WW_array | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (7)
comment:1 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
g++ -O2 -Wall -Werror -std=c++17 -Iinclude -g -c -MMD -o obj/smoke_compile.o src/smoke_compile.cpp
In file included from src/smoke_compile.cpp:1:
include/my_array.h:4:10: fatal error: bits_utillity.hpp: No such file or directory
4 | #include "bits_utillity.hpp"
|
compilation terminated.
Makefile:17: recipe for target 'obj/smoke_compile.o' failed
make: * [obj/smoke_compile.o] Error 1
comment:4 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:5 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
comment:6 Changed 4 years ago by
╰─>$ make
mkdir -p obj
g++ -O2 -Wall -Werror -std=c++17 -Iinclude -g -c -MMD -o obj/smoke_compile.o src/smoke_compile.cpp
g++ -O2 -Wall -Werror -std=c++17 -Iinclude -g -c -MMD -o obj/main.o src/main.cpp
g++ obj/smoke_compile.o obj/main.o -o lab_13
obj/main.o: In function `main':
/home/nicesap/HSE/svn/brilliantov.kirill/lab_13/src/main.cpp:84: multiple definition of `main'
obj/smoke_compile.o:/home/nicesap/HSE/svn/brilliantov.kirill/lab_13/src/smoke_compile.cpp:97: first defined here
collect2: error: ld returned 1 exit status
Makefile:14: recipe for target 'lab_13' failed
make: * [lab_13] Error 1
comment:7 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
33 constexpr static std::size_t SHRINKED_SIZE = (N + 1) / 8;
1) тут ошибка
2) может переполниться при большом N
noexcept
лучше unsigned char, потому что знаковый сдвиг может работать не так, как беззнаковый
сейчас не работает a[i] = a[i + 1] для bool - специализации. Напишите тест.
64 constexpr std::size_t shift = 3;
лучше внести внутрь класса, потому что это деталь его реазилации. Также лучше на этапе компиляции связать значения 3 и 8.
126 for (std::size_t i = 0; i < (N + 1) / 8; i++) {
127 data_[i] = val ? CHAR_MAX : 0;
128 }
здесь тоже ошибка. Ее можно было бы избежать с помощью range-based for.
Можно реализовать эффективнее с помощью memset.
функции из bits_utillity лучше сделать constexpr, это повысит эффективность кода. Сейчас потенциально программа работает существенно медленнее, чем могла бы, из-за того, что может не произойти inline этих простых функций.
например, здесь компилятор мог бы все простить до val&7 в месте вызова, а без inline-а будет происходить вызов функции + подстановка 3 в pow2, расчет 1 << pow2, только после этого -1, только после этого & - куча лишних инструкций
if может быть медленнее, чем простые битовые операции
1ULL
почему ULL? я еще могу понять 1u (наверное, лучше все же static_cast<std::uint8_t>(1))