Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Класс vector: определение и изменение количества элементов
Как вы уже знаете, класс vector
реализует динамический массив, который может автоматически увеличивать объем зарезервированной памяти. Вставка новых элементов приводит к выделению объема памяти, достаточного для размещения всей последовательности элементов, и переносу всех элементов в новую область. Если зарезервированной памяти достаточно, то перераспределение памяти не производится. Получить количество элементов, для которых зарезервирована память, позволяет метод capacity()
, а текущее количество элементов возвращает метод size()
. Прототипы методов:
size_type capacity() const noexcept;
size_type size() const noexcept;
Пример:
std::vector<int> arr = {1, 2, 3};
std::cout << arr.size() << std::endl; // 3
std::cout << arr.capacity() << std::endl; // 3
arr.pop_back(); // Удаляем элемент
std::cout << arr.size() << std::endl; // 2
std::cout << arr.capacity() << std::endl; // 3
Если добавление элементов производится часто, то это может снизить эффективность программы, так как перераспределение памяти будет выполнено несколько раз. Поэтому, если минимальное количество элементов заранее известно, то следует указать его с помощью метода reserve()
. Прототип метода:
void reserve(size_type n);
Пример резервирования пространства под 10
элементов:
std::vector<int> arr;
arr.reserve(10);
std::cout << arr.size() << std::endl; // 0
std::cout << arr.capacity() << std::endl; // 10
arr.push_back(1); arr.push_back(2); arr.push_back(3);
std::cout << arr.size() << std::endl; // 3
std::cout << arr.capacity() << std::endl; // 10
Уменьшить размер массива до минимального значения позволяет метод shrink_to_fit()
. Прототип метода:
void shrink_to_fit();
Пример:
std::vector<int> arr;
arr.reserve(10);
std::cout << arr.size() << std::endl; // 0
std::cout << arr.capacity() << std::endl; // 10
arr.push_back(1); arr.push_back(2); arr.push_back(3);
arr.shrink_to_fit();
std::cout << arr.size() << std::endl; // 3
std::cout << arr.capacity() << std::endl; // 3
Метод resize()
задает количество элементов, равное числу new_size
. Если указанное количество элементов меньше текущего количества, то лишние элементы будут удалены. Если количество элементов необходимо увеличить, то в параметре val
можно указать значение, которое заполнит новое пространство. Прототипы метода:
void resize(size_type new_size);
void resize(size_type new_size, const value_type &val);
Пример:
std::vector<int> arr = {1, 2, 3};
arr.resize(2);
std::cout << arr.size() << std::endl; // 2
arr.resize(5, 0);
std::cout << arr.size() << std::endl; // 5
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 1 2 0 0 0
Метод empty()
возвращает значение true
, если массив не содержит элементов, и false
— в противном случае. Прототип метода:
bool empty() const noexcept;
Пример:
std::vector<int> arr;
std::cout << std::boolalpha
<< arr.empty() << std::endl; // true
arr = {1, 2, 3};
std::cout << arr.empty() << std::endl; // false
Узнать максимальное количество элементов, которое теоретически может содержаться в контейнере, позволяет метод max_size()
. Прототип метода:
size_type max_size() const noexcept;
Пример:
std::vector<int> arr;
std::cout << arr.max_size() << std::endl; // 4611686018427387903
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов