C ++: std :: vector :: reserve не резервируется при наличии указателей - PullRequest
7 голосов
/ 03 апреля 2012

Когда я звоню std::vector::reserve, когда идентификатор имеет тип std::vector<Foo*> reserve(...), ничего не делает:

std::vector<int*> bar;
bar.reserve(20);

//I expect bar.size to return 20...
std::size_t sz = bar.size();
for(std::size_t i = 0; i < sz; ++i) {
    //Do Stuff to all items!
}

Вышеупомянутый цикл for выполняется ровно ноль раз, а bar.size () возвращает ноль. Я не помню, верно ли это для всех других контейнеров STL, но если это так, включая поведение для std :: vector: ПОЧЕМУ?

Ответы [ 3 ]

15 голосов
/ 03 апреля 2012

.reserve () не меняет размер вектора. Функция-член, которую вы ищете, это .resize (). Reserve () - это просто оптимизация. Если вы собираетесь добавить кучу вещей к вектору один за другим с помощью push_back (), то указание, сколько вы добавите с помощью reserve (), может заставить код работать немного быстрее. Но просто вызов функции Reserve () не меняет размер.

7 голосов
/ 03 апреля 2012

vector::reserve() изменяет емкость вектора, а не его размер .

capacityсколько памяти было выделено для хранения элементов вектора.size - сколько элементов фактически удерживается вектором.vector::resize() влияет на последнее.

7 голосов
/ 03 апреля 2012

reserve изменяет емкость вектора, а не размер.Вы, вероятно, хотите resize

...