Мне нужно заполнить вектор конкретными значениями. Я обнаружил, что приведенный ниже код работает, за исключением того, что a.size()
не может измениться с 0. Добавление вызова изменения размера после ввода элементов занимает почти в два раза больше. Кажется, должен быть O (1) способ обновить размер, так как мне не нужно менять какие-либо элементы. Здесь? Должен ли я просто не беспокоиться?std :: векторный размер не обновляется после запаса и заполняется
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
int main()
{
int n = 1e9;
vector<float> a;
a.reserve(n);
for (int i=0; i<n; i++)
a[i] = i;
cout << a[2]; //successfully prints as 1
cout << a.size(); //confusingly prints as 0
}
Редактировать: это не дубликат, так как связанный вопрос не касается бенчмаркинга. Он просто спрашивает разницу в резерве и изменении размера, о котором я не спрашиваю. Этот код работает и работает быстро, но имеет уродливый побочный эффект, оставляя size() «неправильным».
Это * * является дубликатом. Ваш код сломан. Тот факт, что он работает прямо сейчас на вашей машине, не имеет значения: вы получаете доступ к унифицированной памяти. – Ven