ideas icon indicating copy to clipboard operation
ideas copied to clipboard

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

Open perfectGenius opened this issue 1 year ago • 5 comments

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

perfectGenius avatar May 08 '24 22:05 perfectGenius

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

tomilov avatar May 08 '24 23:05 tomilov

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

perfectGenius avatar May 08 '24 23:05 perfectGenius

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

vtopunov avatar May 09 '24 12:05 vtopunov

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

perfectGenius avatar May 09 '24 15:05 perfectGenius

До этого не имел дела со строками и удивился, что у них есть substr: путь_без_кавычек = путь_в_кавычках.substr(1, путь_в_кавычках.length() - 2); Получается, я предлагаю то же самое, но для векторов, subvec.

Ещё, чем больше изучаю С++, тем больше удивляюсь, насколько неуместен в отношении него вопрос

Зачем делать все комбинаторно возможные методы, которые реализуются из различных пар уже существующих методов std::vector? Какая цель? Чтобы что?

Например, вот у string есть length() и size() - оба одно и то же!

perfectGenius avatar Oct 18 '25 15:10 perfectGenius