#language-agnostic #naming-conventions
#не зависящий от языка #соглашения об именовании
Вопрос:
Я достаточно часто это делаю, но я не знаю, как это назвать. Концептуально, по крайней мере для меня, я удаляю элемент из вектора, и в качестве побочного эффекта, по соображениям оптимизации, последний элемент вектора занимает его место.
Конечно, у этой процедуры есть правильное имя? Пожалуйста, просветите меня, чтобы я не писал RemoveElementAndReplaceWithLastItem
метод.
Комментарии:
1. Из любопытства, в каких случаях использования вы делаете это снова и снова?
2. Если я обрабатываю набор элементов, порядок которых не имеет значения. Т.Е. Для объектов в симуляции я забочусь о том, чтобы проходить через каждый объект один раз за шаг, удаляя мертвые. Векторы данных обычно обеспечивают лучшую согласованность кэша, а RemoveElementAndReplaceWithLastItem решает проблему неэффективности стирания в середине.
Ответ №1:
Я не верю, что существует общий термин для того, что вы делаете. Но для вашего очень конкретного варианта использования я бы предложил назвать функцию на основе вашего намерения, а не того, что делает операция. Как вы сказали, то, что делает операция, является побочным эффектом, то, что вы действительно делаете, — это удаление из середины.
Поэтому я бы предложил назвать функцию: fast_delete
(или quick_remove
, на ваше усмотрение).
Затем в комментарии к реализации функции вы описываете механизм быстрого удаления: который заменяет удаленный элемент последним элементом. Вы должны даже упомянуть то, что вы сказали выше о том, почему, по вашему мнению, делать это таким образом быстрее и что операция не гарантирует, что список останется в том же порядке, что и раньше.
Комментарии:
1. Что касается двух противоположных стилей именования, данных вами и Джеймсом Молером в другом ответе, я, конечно, предпочитаю ваш. Я не могу решить, что мне нравится больше.
fast_delete
передает намерение оптимизации, в то времяspecial_delete
как было бы совершенно ясно, что что- то происходит. Ну что ж, такие детали не так важны. Ответ на мой актуальный вопрос, похоже, «вероятно, нет?».
Ответ №2:
Ваша функция должна вызываться одним из следующих:
-
ReplaceWithLast()
-
MoveLastTo()
-
ConvertQtoPQ()
Как в convert Queue в PriorityQueue
Ответ №3:
Вы можете назвать свой метод / функцию следующим образом:
replaceInPlace: anElement
или для вашего конкретного языка
replaceInPlace(anElement)