Предотвращение изменения размера std :: vector на push_back - PullRequest
4 голосов
/ 03 августа 2011

У меня есть std :: vector, который, я знаю, никогда не будет расти - в нем всегда будет n элементов (к сожалению, n неизвестен во время компиляции, поэтому я не могу использовать std :: массив). Я могу сделать:

std::vector<blah> v(n);

Что правильно устанавливает его емкость на n. Но когда я продолжаю заполнять v значением push_back, оно автоматически изменяется до 2n.

Я понимаю, что это преждевременная оптимизация, но это меня беспокоит. Есть ли способ установить максимальный размер или что-то?

1 Ответ

13 голосов
/ 03 августа 2011

Этот конструктор не устанавливает емкость вектора равной n, но вместо этого создает вектор, содержащий n объекты, созданные с помощью конструктора blah по умолчанию. Это может сбивать с толку людей с фоном Java или .NET, где ArrayList и List<T> оба имеют конструктор, который устанавливает начальную емкость.

Решение состоит в том, чтобы сделать это в два шага:

std::vector<blah> v; // create an empty vector
v.reserve(n); // increase capacity
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...