Информация об изменениях

Сообщение Re[3]: std::vector удаление списка элементов от 20.02.2015 14:18

Изменено 20.02.2015 14:33 andy1618

Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, andy1618, Вы писали:


A>>Как вариант — создать новый вектор (с установкой capacity) и скопировать туда только нужные элементы, а старый вектор удалить.

A>>Сложность O(N).

К>... где N — это размер... хм, размер которого вектора: исходного, откуда надо повыбрасывать, или справочного, что надо повыбрасывать?


Имелся ввиду исходный вектор.
Правда, поскольку справочный вектор несортированный, то для эффективной реализации понадобится ещё дополнительная операция,
но она тоже уложится в O(N) — например, сортировка подсчётом или, если полезные данные в исходном векторе ограничены неким диапазоном,
то можно прямо в нём промаркировать удаляемые элементы каким-то волшебным значением.
Re[3]: std::vector удаление списка элементов
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, andy1618, Вы писали:


A>>Как вариант — создать новый вектор (с установкой capacity) и скопировать туда только нужные элементы, а старый вектор удалить.

A>>Сложность O(N).

К>... где N — это размер... хм, размер которого вектора: исходного, откуда надо повыбрасывать, или справочного, что надо повыбрасывать?


Имелся ввиду исходный вектор.
Правда, поскольку справочный вектор несортированный, то для эффективной реализации понадобится ещё дополнительная операция,
но она тоже уложится в O(N) — например, сортировка подсчётом или, если полезные данные в исходном векторе ограничены неким диапазоном,
то можно прямо в нём промаркировать удаляемые элементы каким-то волшебным значением.

UPD: кстати, тогда можно ещё проще сделать — если будет отсортированный справочный вектор, то можно сделать
перепаковку исходного вектора прямо in-place, сдвигая к началу только нужные элементы, а потом отсечь хвост с помощью resize.