Переменные, которые не инициализируются явно, будут или не могли бы быть обнулены в Сборке конечных версий.
Инициализирует ли изменение размера вновь выделенный вектор, когда резерв только выделяет, но не создает?
Да.
Первый код записывает в out [i]
, что сводится к begin () + i
(т.е. . дополнение). Второй код использует push_back
, который, вероятно, немедленно записывает в известный указатель, эквивалентный end ()
(то есть без добавления). Вы, вероятно, могли бы сделать первый запуск таким же быстрым, как и второй, используя итераторы, а не целочисленную индексацию.
Edit: также для пояснения некоторых других комментариев: вектор содержит числа с плавающей запятой, и создание числа с плавающей запятой фактически нецелесообразно (точно так же объявление «float f;» не приводит к появлению кода, а только сообщает компилятору, что нужно оставить место для float в стеке). Поэтому я думаю, что любая разница в производительности между resize ()
и reserve ()
для вектора с плавающей запятой не связана с конструкцией.
out.resize( audioBlock.size() );
Поскольку размер out
(= 0) меньше, чем audioBlock.size ()
, дополнительные элементы создаются и добавляются в конец из
. Это создает новые элементы, вызывая их конструктор по умолчанию.
Резервный только выделяет память.
Resize ()
Изменяет контейнер так, чтобы он имел ровно n элементов, вставляя элементы в конец или удаляя элементы с конца, если необходимо. Если какие-либо элементы вставлены, они являются копиями t. Если n> a.size ()
, это выражение эквивалентно a.insert (a.end (), n - size (), t)
. Если n
a.erase (a.begin () + n, a.end ())
.
Reserve ()
Если n меньше или равно capacity ()
, этот вызов не действует. В противном случае это запрос на выделение дополнительной памяти. Если запрос успешен, то capacity ()
больше или равно n; в противном случае capacity ()
не изменяется. В любом случае size ()
не изменяется.
Память будет перераспределена автоматически, если в вектор вставлено более capacity () - size ()
элементов. Перераспределение не изменяет size ()
и не меняет значения каких-либо элементов вектора. Однако он увеличивает capacity ()
Reserve вызывает перераспределение вручную. Основная причина использования reserve ()
- эффективность: если вы знаете, до какой емкости должен в конечном итоге вырасти ваш вектор, то обычно более эффективно выделить эту память сразу, а не полагаться на автоматическое перераспределение. схема.
capacity ()
Reserve вызывает перераспределение вручную. Основная причина использования reserve ()
- эффективность: если вы знаете, до какой емкости должен в конечном итоге вырасти ваш вектор, то обычно более эффективно выделить эту память сразу, а не полагаться на автоматическое перераспределение. схема.
capacity ()
Reserve вызывает перераспределение вручную. Основная причина использования reserve ()
- эффективность: если вы знаете, до какой емкости должен в конечном итоге вырасти ваш вектор, то обычно более эффективно выделить эту память сразу, а не полагаться на автоматическое перераспределение. схема.