2016-02-11 5 views
3

Скажем, у меня есть вектор с 100000 элементами, и я хочу перебирать вектор по одному, копируя элемент в какую-то карту, но на каждой итерации удаляя элемент из вектора - что такое самый эффективный способ сделать это?Каков наиболее эффективный способ удаления первого элемента из большого вектора?

Несмотря на то, что итерация через вектор, я сделал что-то вроде «it = vec.erase (it)», но для завершения требуется совершенно возраст. Нет ли более быстрого пути? И как примечание стороны, заказ очень важен ...

+7

Собираетесь ли вы удалить каждый элемент в векторе? Не можете ли вы просто называть 'clear()' в конце? –

+0

Не используйте вектор. Используйте другой контейнер. – VladimirS

+0

Как сделать заказ важным при помещении элементов в контейнер, который делает свой заказ? –

ответ

4

Нет ни одного. Вы используете вектор в качестве очереди. Это противоречит его дизайну.

У вас есть несколько вариантов. Напомним следующее:

  • Не удаляйте по одному элементу за раз. Делайте их партиями.

  • Используйте вектор в качестве кольцевого буфера и просто укажите индекс, но никогда не удаляйте элементы.

  • Используйте более подходящий контейнер, такой как std::deque.

-2

Если вам нужно использовать vector, то учитывая ваши требования, вы должны использовать vector указателей на динамически выделяются экземпляры объектов вместо vector самих объектов.

0

Поскольку порядок элементов в векторе не может быть важен - вы все равно помещаете их в карту - простым решением является замена первого элемента на последний, а затем удаление последнего элемента. Это будет намного быстрее.

+2

Если вы собираетесь это делать, вы можете избежать обмена и просто обработать вектор в обратном порядке, каждый раз появляясь. – rici

+0

@rici, справедливо. – SergeyA

Смежные вопросы