Vector c++11 и выше

Рейтинг: 1Ответов: 1Опубликовано: 18.03.2015

Вопрос, конечно, безумно глупый, но всё же для меня он статёся...

Могу ли я засовывать элементы в std::vector<> с помощью emplace_back без использования reserve? То есть вопрос именно в том, всегда ли необходимо указывать размер вектора или же есть варианты, чтобы класть данные без указания (чтобы он сам увеличивался при необходимости)?

Ответы

▲ 1Принят

vector использует динамическую память и сам расширяет её по мере необходимости, однако при этом при недостатке зарезервированной памяти не только каждый раз захватывается новая область памяти и освобождается старая, но и вызываются конструкторы и деструкторы элементов (если они определены). Поэтому лучше сделать reserve побольше, а потом shrink_to_fit.