Это можно оптимизировать бесконечно, но моя немедленная реакция - использовать контейнер, отличный от вектора.Помните, что память для вектора распределяется последовательно в памяти, что означает, что добавление дополнительных элементов вызывает перераспределение всего вектора, если не хватает текущего пространства для хранения новых элементов.
Попробуйте контейнер, оптимизированный для постоянных вставок, такой как очередь или список.
В качестве альтернативы, если требуется вектор, вы можете попытаться выделить ожидаемый объем памяти заранее, чтобы избежать непрерывного перераспределения.См. vector.reserve()
: Вектор .Обратите внимание, что зарезервированная емкость выражается в элементах , а не в байтах.
int numberOfItems = 1000;
int numberOfFiles = 360;
size_type totalExpectedSize = (numberOfItems) * (numberOfFiles);
myVector.reserve( totalExpectedSize );
---------- РЕДАКТИРОВАТЬ СЛЕДУЮЩИЙ КОД ПОСТ ----------
Моя непосредственная задача заключается в следующей логике в analyze()
:
for (unsigned int i = 1; i<points.size()-1; i++)
{
if (points[i]>points[i-1]&&points[i]>points[i+1])
{
maxpoints.push_back(points[i]);
}
if (points[i]<points[i-1]&&points[i]<points[i+1])
{
minpoints.push_back(points[i]);
}
}
allmax.push_back(maxpoints);
allmin.push_back(minpoints);
В частности, моя задача - контейнеры allmax и allmin, в которые вы помещаете копииконтейнеры maxpoints и minpoints.С помощью этой логики сами контейнеры maxpoints и minpoints могут становиться достаточно большими в зависимости от наборов данных.
Вы несете стоимость копий контейнера несколько раз.Действительно ли необходимо копировать контейнеры minpoints / maxpoints в allmax / allmin?Не зная немного больше, трудно оптимизировать дизайн хранилища.
Я нигде не вижу, чтобы минпоинты и макспойнты фактически опустошались, что означает, что со временем они могут вырасти очень большими, а их соответствующие копииконтейнеры allmin / allmax вырастут очень большими.Должны ли minpoints / maxpoints представлять минимальные / максимальные точки для только одного файла ?
В качестве примера давайте рассмотрим упрощенный сценарий minpoints и allmin (но имейте в виду, что это применимок макс точно так же, и оба в большем масштабе, чем показано здесь).Это, очевидно, набор данных, разработанный для того, чтобы показать мою точку зрения:
File 1: 2 1 2 1 2 1 2 1 2 1 2
minpoints: [1 1 1 1 1]
allmin: [1 1 1 1 1]
File 2: 3 2 3 2 3 2 3 2 3 2 3
minpoints: [1 1 1 1 1 2 2 2 2 2]
allmin: [1 1 1 1 1 1 1 1 1 1 2 2 2 2 2]
File 3: 4 3 4 3 4 3 4 3 4 3 4
minpoints: [1 1 1 1 1 2 2 2 2 2 3 3 3 3 3]
allmin: [1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3]
Существуют и другие варианты оптимизации и критики, но пока я ограничиваю это попыткой решить вашу непосредственную проблему.Можете ли вы опубликовать функцию makeGraph()
, а также определения всех задействованных контейнеров (точки, минимальные точки, максимальные точки, allmin, allmax)?