|
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|||||||||||
Критику в студию25.04.2013, 23:39. Показов 6365. Ответов 30
Метки нет (Все метки)
Доброго всем времени суток! Я вот написал такой себе класс матриц, прошу оценить его и посоветовать что можно улучшить или изменить, как повысить быстродействие или, возможно, что-то надо добавить.
Знаю,что надо сделать шаблон класса для разных типов данных, но дабы сейчас все было красиво и хорошо не загрязнял этим код! Любые дельные советы будут "лайкнуты"! matrix.h
1
|
|||||||||||
| 25.04.2013, 23:39 | |
|
Ответы с готовыми решениями:
30
из Борланда в Студию Тестовое задание от работадателя. Хотелось бы услышать критику. Как войти в Visual студию? |
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
| 25.04.2013, 23:54 | |
|
metaluga145, Красавец! Мне нечего добавить. Все правильно сделал.
Я могу только мелочь подсказать от ты когда создаешь заголовочный файл нужно обязательно, то что в нем записано записывать между #ifndef #define и #endif , это что бы случайно повторного включения не было. По коду конечно притензий нету. От еще Страуструп советует типо в классе при перегрузке операторов которые не изменяют как бы класс ну от у тебя + - * и.т.п. не изменяют собственный класс, как бы их нужно определять глобально, а отакие +=, *= и.т.п. как бы членами класса делать. Ну это он так как бы советует делать. Ну это не сильно важно. Вообщем мне понравилось молодчага.
0
|
|
| 26.04.2013, 00:27 | |
|
0
|
|
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 26.04.2013, 00:27 | |
|
Два одинаковых кода: вывод матрицы на экран и вывод в файл, напрашивается заменить одним. В зависимости от потока, будет вывод или на экран, или в файл.
0
|
|
|
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
||||||||
| 26.04.2013, 01:35 | ||||||||
Добавлено через 1 минуту И для чего Вам нужен виртуальный деструктор?
1
|
||||||||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||||||||||
| 26.04.2013, 03:36 | ||||||||||||||
|
Не увидел оператора присваиваний.
В нескольких местах не помешало бы поставить Enter, хоть скроллбар убрать (я вообще считаю, что код должен иметь ширину не более 80 символов) ![]()
Комменты желательно подтянуть на один уровень отступов, просто для ++читаемость. Сделать конст методы там, где нужно. Это по заданию нужно извращаться с хранением матрицы внутри одномерного массива?
0
|
||||||||||||||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|||||||
| 26.04.2013, 04:47 | |||||||
|
1. Класс так и просится стать шаблонным.
2. Не вижу необходимости использовать сишные массивы, можно спокойно использовать std::vector. 3. 4. 5. Было бы неплохо добавить move-конструктор. 6. 7. 8. 9. Метод zero туда же. 10. Операторы посмотрел очень бегло. То, что должны быть константными - уже сказали. Сходу не увидел проверок на выход за границы массивов. 11. 12. Методы вывода также вынести из класса. 13. "SetPrecison" также не нужен в классе.
2
|
|||||||
|
Неэпический
|
||||||||||||||||
| 26.04.2013, 10:09 | ||||||||||||||||
|
имхо, класс не должен содержать методов вывода. Лучше уж перегрузить <<. Да и сам класс лучше сделать шаблонным.
Добавлено через 2 минуты Так же, если есть операторы "+", "-" и другие, то сделайте и оператор "+=" Добавлено через 1 минуту
Добавлено через 43 секунды Так же не видно индексации Добавлено через 2 минуты
+ может мне не нужно её обнулять? + может мне нужна матрица такого же размера или меньше?
0
|
||||||||||||||||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
| 26.04.2013, 12:40 | |
|
При умножении/сложении/вычитании матриц нет проверки на согласованность размеров матриц.
Поля, объявленные protected надо бы сделать private. Потроха сделать на базе std::vector. А еще непонятно зачем имитация двумерности на базе одномерного массива.
0
|
|
|
Higher
|
|||
| 26.04.2013, 13:17 | |||
|
0
|
|||
|
|
||||||
| 26.04.2013, 13:18 | ||||||
|
Передавать POD типы по const ссылке незачем, передавай по значению.
Интерфейс класса
1
|
||||||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||
| 26.04.2013, 14:03 | |||
|
Добавлено через 1 минуту
0
|
|||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
| 26.04.2013, 14:23 | |
|
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||
| 26.04.2013, 14:25 | ||
|
Tulosba, В данном случае уместнее будет сказать скалярные.
1
|
||
| 26.04.2013, 14:38 | |
|
Не по теме: Да, точно, заглянул в стандарт, к POD еще структуры, юнионы и массивы скалярных типов относятся.
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
| 26.04.2013, 14:51 | |
|
0
|
|
| 26.04.2013, 14:56 | |
|
Не по теме: Kastaneda, и тривиальные классы, если говорить о С++11
0
|
|
|
Higher
|
||||
| 26.04.2013, 15:03 | ||||
Сообщение было отмечено как решение
РешениеА вот кеш для линейного массива работает значительно лучше. Учитывая то, что доступ к памяти - наиболее времязатратная операция, получаем значительный выигрыш. Ну и еще векторизация и префетчинг для линейного массива делается гораздо проще, чем для массива указателей. А это тоже достаточно неслабое ускорение. В качестве бонуса, менеджер памяти гораздо быстрее поймет, что данная матрица является одним большим объектом, а не кучкой мелких. Это благотворно повлияет на общий перформанс. Ну и еще потребуется чуть-чуть меньше памяти (не понадобится хранить массив указателей). Итого: получаем более бережное обращение с памятью и кешем в частности, что может дать очень даже неслабое ускорение (в некоторых случаях - в десятки раз).
5
|
||||
|
|
|
| 26.04.2013, 15:05 | |
|
metaluga145, а где в классе перегруженые операторы [][]? Это же важная штука для матрицы.
0
|
|
| 26.04.2013, 15:05 | |
|
Помогаю со студенческими работами здесь
20
Где взять STLPort под 13 студию? Как студию подружить со статической библиотекой скопилированой в MinGW ? На критику Надеюсь на критику Можно услышать критику Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|