cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

Добавить контэйнерам возможность обрезаться до нужного диапазона #592

Open perfectGenius opened 1 month ago

perfectGenius commented 1 month ago

У вектора с помощью erase можно удалить элемент или диапазон. Но странно, что нет возможности удалить всё, кроме этого диапазона. Мне пришлось вручную удалять спереди и сзади от нужного диапазона. Но если объединить эти функции в одну, то пропадёт лишнее перемещение указателя конца, это произойдёт лишь один раз. Назвать можно по аналогии с shrink_to_fit - shrink_to_range.

tomilov commented 1 month ago

Можно воспользоваться std::move + resize(). В любом случае в реализации будет то же самое происходить, что и в случае с удалением из конца + удалением из начала. Чем так страшно перемещение указателя конца? Это кажется O(0), не?)

perfectGenius commented 1 month ago

И это будет выглядеть красивее, чем вектор.shrink_to_range(вектор.begin() + начало_диапазона, вектор.begin() + конец_диапазона);?

vtopunov commented 1 month ago

shrink_to_fit не удаляет элементы, а урезает зарезервированную память. Нельзя назвать по аналогии с shrink_to_fit

perfectGenius commented 1 month ago

Действительно, легко так подумать по похожему названию. Тогда resize_to_range.