В чем разница между временными сложностями вектора <int>a {N, 0} и int arr a [N] = {0} - PullRequest
0 голосов
/ 04 ноября 2018

В чем разница между временными сложностями vector <int> a {N, 0} и int arr a[N] = {0} при их инициализации фиксированной переменной?

Если они оба одинаковы, то какие методы мы можем использовать для уменьшения сложности времени в нашей программе при инициализации массивов?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Вектор выделяет память в куче, поэтому выделение памяти для вектора обходится дешевле, поскольку структура данных кучи должна искать доступный блок памяти в куче. В случае массива, память выделяется в стеке, что эквивалентно уменьшению указателя стека. Однако инициализация вектора и массива почти занимает одно и то же время, так как оба используют memset и затем сопоставляются с сто аппаратной инструкцией. Основное отличие заключается в распределении памяти. Когда я разрабатывал высокопроизводительное программное обеспечение, я обнаружил, что выделение и инициализация вектора занимают значительное время (зависит от размера).

Сложность времени инициализации одинакова для вектора и массива. Выделение вектора намного дороже, чем вектора.

0 голосов
/ 04 ноября 2018

Векторные данные размещаются в куче, а массив в стеке. Кроме этого, надеюсь, ваш компилятор оптимизирует оба к одному memset(0).

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

Сначала напишите свою программу, посмотрите, достаточно ли она быстра. Если это не так, профилируйте его и сконцентрируйтесь на медленных битах. Проведение небольших оптимизаций, подобных этой, еще до того, как вы узнаете, нужны ли они, часто бесплодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...