Как уменьшить станд.:: вектор?

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

34
задан Azeem 15 August 2018 в 05:30
поделиться

3 ответа

Эффективный STL, Scott Meyers, Объект 17: Используйте эти swap прием для обрезки избыточной мощности.

vector<Person>(persons).swap(persons);

После этого, persons "уменьшается для установки".

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

60
ответ дан Sébastien RoccaSerra 27 November 2019 в 16:17
поделиться

Создайте новое, временное, векторные от существующего тогда называют метод подкачки на существующем, передавая временный в. Позвольте временному файлу (теперь со старым, увеличенного размера, буфер) выходят из объема.

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

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

[Редактирование] Да, я просто сказал то же как Sebastien в большем количестве слов. Другой случай stackoverflow состояния состязания;-)

8
ответ дан philsquared 27 November 2019 в 16:17
поделиться

Вы ищете эквивалент QVector:: сожмите , и я боюсь, что это не существует explicitely в STL. Пойдите для ответа SГ©bastien, если это корректно для Вашей реализации STL.

-2
ответ дан Caleb Huitt - cjhuitt 27 November 2019 в 16:17
поделиться
Другие вопросы по тегам:

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