Метод capacity
Метод capacity возвращает текущую вместимость вектора,
то есть количество элементов, которое вектор может хранить
без необходимости перевыделения памяти. Вместимость не равна
размеру вектора - она всегда больше или равна значению,
возвращаемому методом size. Метод не принимает
параметров и не изменяет вектор.
Синтаксис
vec.capacity()
Пример
Давайте создадим вектор с несколькими элементами и посмотрим его размер и вместимость:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
cout << "size: " << vec.size() << endl;
cout << "capacity: " << vec.capacity() << endl;
return 0;
}
Результат выполнения кода:
"size: 5"
"capacity: 5"
Пример
Давайте добавим элементы в вектор и посмотрим, как изменяется его вместимость:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec;
cout << "capacity: " << vec.capacity() << endl;
vec.push_back(1);
cout << "capacity: " << vec.capacity() << endl;
vec.push_back(2);
cout << "capacity: " << vec.capacity() << endl;
vec.push_back(3);
cout << "capacity: " << vec.capacity() << endl;
return 0;
}
Результат выполнения кода:
"capacity: 0"
"capacity: 1"
"capacity: 2"
"capacity: 4"
Как видно из примера, при добавлении элементов
вместимость увеличивается не на 1, а удваивается,
когда места перестаёт хватать.
Пример
Давайте сравним размер и вместимость после удаления элементов из вектора:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
vec.reserve(10);
cout << "size: " << vec.size() << endl;
cout << "capacity: " << vec.capacity() << endl;
vec.pop_back();
vec.pop_back();
cout << "size: " << vec.size() << endl;
cout << "capacity: " << vec.capacity() << endl;
return 0;
}
Результат выполнения кода:
"size: 5"
"capacity: 10"
"size: 3"
"capacity: 10"
После удаления элементов вместимость не уменьшается -
память остаётся выделенной. Чтобы освободить её,
можно использовать метод shrink_to_fit.
Смотрите также
-
метод
size,
который возвращает количество элементов в векторе -
метод
reserve,
который резервирует память под элементы -
метод
shrink_to_fit,
который уменьшает вместимость до размера -
метод
empty,
который проверяет вектор на пустоту