-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Удаление элемента вектора за О(1), если не требуется сохранять порядок элементов #593
Comments
Зачем делать все комбинаторно возможные методы, которые реализуются из различных пар уже существующих методов |
Поменьше и попроще кода, больше производительность. |
Производительность не больше. Ни на такт. |
Почему же тогда вместо pop_back просто не делать resize -1? |
делать |
Чтобы понимать, имеется в виду: std::swap(*it, vec.back());
vec.pop_back(); |
|
А как же производительность? Т.е. зачем выделять буфер для обмена и копировать удаляемый элемент? Надежда на компилятор, что он поймёт замысел и не станет делать лишнее?
Может оказаться, что компилятор в некоторых случаях не поймёт, что эти две строки можно выполнять параллельно после получения адреса последнего элемента. А если это одна функция, то это будет однозначно. |
Почему не |
move разве автоматически делает pop_back? |
Не заменит, я только про первую строчку. Копирование не понравилось. *it = std::move(vec.back());
vec.pop_back(); |
Копируем последний элемент вектора на место удаляемого и сдвигаем указатель конца на один элемент.
Можно назвать что-то типа erase_unordered.
The text was updated successfully, but these errors were encountered: