уменьшение вектора

Попробуйте:

select ID from items group by ID having count(ID)> 1

, который вернет все значения ID, появляющиеся более одного раза.

7
задан Louis Marascio 8 August 2011 в 13:45
поделиться

3 ответа

Обычный прием должен подкачать с пустым вектором:

vector<vertex>(vertexvector.begin(), vertexvector.end()).swap(vertexvector);
8
ответ дан 6 December 2019 в 05:01
поделиться

При совании элементов от вектора он не освобождает память (потому что это делало бы недействительным итераторы в контейнерные элементы). Можно скопировать вектор в новый вектор и затем подкачать это с оригиналом. Это затем сделает его не ненужным пространством. Подкачка имеет постоянную временную сложность, потому что подкачка не должна делать недействительным итераторы к элементам подкачанных векторов: Таким образом, это должно просто обмениваться внутренними буферными указателями.

vector<vertex>(a).swap(a);

Это известно как идиома "Уменьшения к соответствию". Кстати, следующая версия C++ включает "shrink_to_fit ()" функция членства для станд.:: вектор.

27
ответ дан 6 December 2019 в 05:01
поделиться

Зарезервированная память не уменьшается, когда векторный размер уменьшается, потому что это обычно лучше для производительности. Уменьшение объема памяти, зарезервированного вектором, является столь же дорогим как увеличение размера вектора вне зарезервированного размера, в котором это требует:

  1. Попросите у средства выделения новой, меньшей ячейки памяти,
  2. Скопируйте содержание со старого местоположения, и
  3. Скажите средству выделения освобождать старую ячейку памяти.

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

Если у Вас было очень большое изменение в размере, требуемом, и Вы знаете, что не захотите, чтобы тот вектор расширился снова (принципал местности предполагает, что Вы будете, но конечно существуют исключения), то можно использовать предложенную операцию подкачки litb для явного уменьшения вектора:

vector<vertex>(a).swap(a);
6
ответ дан 6 December 2019 в 05:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: