|
Заблокирован
|
|||||||||||||||||||||
Реализация списка на базе динамического массива [code review]29.07.2018, 11:39. Показов 3916. Ответов 7
Метки нет (Все метки)
Кликните здесь для просмотра всего текста
Добавлено через 3 часа 13 минут Тема актуальна.
0
|
|||||||||||||||||||||
| 29.07.2018, 11:39 | |
|
Ответы с готовыми решениями:
7
[Code review] Реализация INotifyPropertyChanged Реализация динамического односвязного списка |
|
Администратор
|
|||||||
| 29.07.2018, 14:46 | |||||||
|
Стив Роджерс, в коде есть баги
1) Метод IndexOf возвращает неверный индекс. На единицу больше чем нужно. 2) Метод InsertAt увеличивает Count раньше валидации индекса Другие моменты: 1) Нет индексатора. Хуже того - нет способа получить элемент из коллекции 2) Не реализован интерфейс IEnumerable<T> 3) Метод IndexOf генерирует неверное исключение без описания в случае когда элемент не найден. Если целью было повторение функционала стандартного списка, то следует вернуть -1. 4) Метод CloneAs() можно улучшить:
Добавлено через 56 секунд P.S. На будущее - это называется code review, а не code overview Добавлено через 1 минуту P.P.S. Не клон ли ты Volobuev Ilya?
0
|
|||||||
|
|
||
| 29.07.2018, 14:59 | ||
|
Стив Роджерс,
Ну во-первых, у вас странный список какой-то. Вы что под списком понимаете? Если это связанный список, то странно для него использовать динамический массив. А если у вас список в понимании упорядоченный набор данных, то непонятно, почему у вас нет доступа к элементам по индексу? (и при этом IndexOf почему-то есть). В целом, лучше реализовать стандартные интерфейсы (в вашем случае IList), чем придумывать свой ни с чем не совместимый велосипед. Также смущает: 1) В методе InsertAt вы сначала увеличиваете Count и массив, и лишь потом проверяет индекс на диапазон. В результате, если подать неправильный индекс, то сначала список будет изменен и лишь затем сгенерируется ошибка. Такого быть не должно. Тем более, что после этого список будет в невалидном состоянии, потому что размер списка увеличился, но значение не добавилось. 2) IndexOf у вас генерирует ошибку в случае если элемент не найден. Но в поисковых методах принято возвращать -1 если элемент не найден. Именно так делает настоящий List<T>. Не по теме: OwenGlendower, Опередили пока писал, в след раз буду обновлять коменты :)
1
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 29.07.2018, 15:08 | |
|
К замечаниям товарищей OwenGlendower и Storm23 хочу добавить, что при удалении элемента производится сдвиг всех элементов влево и уменьшается Count, но "осиротевший" элемент не затирается.
Если список используется со ссылочными типами, это может привести к утечке памяти в случаях, когда список обновляется не часто: ссылка на "осиротевший" элемент будет лежать в массиве и объект не будет удален сборщиком пока эта ссылка на затрется другой или не занулится. Пример: в список добавляется 100 элементов, потом 50 удаляются и список больше не обновляется до завершения работы программы. Получаем 50 объектов, висящих в памяти.
1
|
|
|
Заблокирован
|
|||
| 29.07.2018, 15:38 [ТС] | |||
|
Всем спасибо!
Добавлено через 17 минут Всем спасибо! Добавлено через 7 минут
0
|
|||
|
Администратор
|
|||||||||||||
| 29.07.2018, 17:40 | |||||||||||||
Сообщение было отмечено Стив Роджерс как решение
РешениеНашел кстати еще баг с методоами AddBefore/AddAfter
0
|
|||||||||||||
|
Заблокирован
|
|
| 29.07.2018, 19:11 [ТС] | |
|
Идея AddBefore - добавить элемент y на место предшествующего x элементу. Баги поправлены.
Добавлено через 1 минуту Это и есть попытка сделать аналог List<T>, только я не старался сильно увлекаться тем, какие интерфейсы реализовывать - главное было как можно более оптимально по скорости реализовать операции списка. За советы спасибо - в чем развивать себя чётко уяснил еще раз. ![]() Добавлено через 1 минуту Если использовать Add вместо AddBefore - элемент y добавиться на место x и все элементы до x (справа от него и включая его) сдвинутся вправо.
0
|
|
|
|
|||||||
| 29.07.2018, 19:50 | |||||||
Сообщение было отмечено Стив Роджерс как решение
Решение
0
|
|||||||
| 29.07.2018, 19:50 | |
|
Помогаю со студенческими работами здесь
8
Реализация динамического списка динамических стеков
Code Review
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|