Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Эффективный STL, Scott Meyers, Объект 17: Используйте эти swap
прием для обрезки избыточной мощности.
vector<Person>(persons).swap(persons);
После этого, persons
"уменьшается для установки".
Это полагается на то, что vector
конструктор копии выделяет только столько же сколько память по мере необходимости для скопированных элементов.
Создайте новое, временное, векторные от существующего тогда называют метод подкачки на существующем, передавая временный в. Позвольте временному файлу (теперь со старым, увеличенного размера, буфер) выходят из объема.
Эй престо, Ваш вектор имеет точно правильный размер для своего содержания.
, Если это походит, большое копирование и выделение - принимает во внимание, что это - то, что вектор делает каждый раз, когда это имеет к перевыделению мимо его текущего зарезервированного предела так или иначе.
[Редактирование] Да, я просто сказал то же как Sebastien в большем количестве слов. Другой случай stackoverflow состояния состязания;-)
Вы ищете эквивалент QVector:: сожмите , и я боюсь, что это не существует explicitely в STL. Пойдите для ответа SГ©bastien, если это корректно для Вашей реализации STL.