Хотя широко распространено мнение, что std::vector работает аналогично массивам, недавние тесты поставили под сомнение это представление. В этой статье мы рассмотрим различия в производительности между std::vector и простыми массивами и прольем свет на основные причины.
Для проведения тестов был реализован тест, который включал многократное создание и изменение больших массивов. пиксельных объектов. Тесты проводились с использованием двух реализаций: std::vector и необработанных указателей, имитирующих простые массивы.
Первоначальные результаты выявили значительный разрыв в производительности: std::vector был примерно в 3-4 раза медленнее, чем простые массивы.
UseArray completed in 2.619 seconds UseVector completed in 9.284 seconds UseVectorPushBack completed in 14.669 seconds
Это удивительное открытие побудило более внимательно изучить код. Было обнаружено, что кажущаяся разница в производительности связана с тем фактом, что для изменения элемента вектора требовалось дважды получить к нему доступ: один раз для изменения размера вектора и второй раз для инициализации элемента.
Путем оптимизации реализации вектора для инициализации каждого элемента. только один раз, мы получили значительно улучшенную производительность:
UseVector completed in 2.216 seconds
Эта обновленная производительность теперь сравнима с производительностью обычного массивы. Важно отметить, что наблюдаемая небольшая разница может быть связана с факторами, не связанными с базовой структурой данных.
В заключение, хотя std::vector представляет собой удобную и универсальную структуру данных, на ее производительность могут влиять факторы. например, способ инициализации элементов и доступа к ним. Когда производительность имеет решающее значение, разумно тщательно рассмотреть конкретные требования и изучить альтернативные варианты, такие как простые массивы или другие структуры данных.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3