C <vector> функция resize
resizeиспользуется в vector дляResizeфункции, которая может изменять количество элементов в контейнере.
resizeявляется функцией-членом классов контейнеров, используемой дляResize контейнера до указанного количества элементов.Если новый размер больше текущего размера, добавляются новые элементы; если он меньше текущего размера, лишние элементы удаляются.
resizeПредоставляет возможность гибко изменять размер контейнера, одну из мощных динамических возможностей vector.
Определения слов: resizeОзначает "resize", т.е. изменение количества элементов в контейнере.
Базовый синтаксис и параметры
resizeЯвляется функцией-членом класса контейнера, которая может задавать новое количество элементов.
Формат синтаксиса
void resize(size_type count); void resize(size_type count, const T& value);
Описание параметра
Параметр: count
- Тип:
size_type(беззнаковый целочисленный тип, обычноsize_t) - Описание: новое количество элементов в контейнере.
Параметр(Необязательно):value
- Тип: совпадает с типом элементов контейнера.
- Описание: значение по умолчанию, используемое для заполнения новых элементов, когда необходимо добавить элементы. Если не указано, по умолчанию используется инициализация значением (0 для встроенных типов).
Описание функции
- Возвращаемое значение:
void(нет возвращаемого значения). - Эффект: контейнера
size()Resize до count. Если элементы нужно добавить, заполните их значением value; если элементы нужно удалить, отбросьте лишние элементы. - Примечание:
resizeизменит контейнераsize(), а также может изменитьсяcapacity()。
Пример
Давайте тщательно освоим это на серии примеров.resizeИспользование.
Пример 1: Базовое использование - расширение контейнера
Пример
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3};
std::cout << "Начальное состояние - размер: " << numbers.size()
<< ", вместимость: " << numbers.capacity() << std::endl;
std::cout << "Элементы: ";
for(int n : numbers) std::cout << n << " ";
std::cout << std::endl;
// Увеличить контейнер до 10 элементов
numbers.resize(10);
std::cout << "\nПосле resize(10) - размер: " << numbers.size()
<< ", вместимость: " << numbers.capacity() << std::endl;
std::cout << "Элементы: ";
for(int n : numbers) std::cout << n << " ";
std::cout << std::endl;
return 0;
}
Ожидаемый вывод:
初始状态 - size: 3, capacity: 3 元素: 1 2 3 resize(10) 后 - size: 10, capacity: 10 元素: 1 2 3 0 0 0 0 0 0 0
Анализ кода:
- Изначально есть 3 элемента: 1, 2, 3.
resize(10)Изменить размер до 10.- 7 вновь добавленных элементов инициализируются значением 0.
Пример 2: Заполнение новых элементов указанным значением
Вы можетеresizeукажите значение заполнения, когда.
Пример
#include <vector>
#include <string>
int main() {
std::vector<std::string> names = {"Alice", "Bob"};
std::cout << "Начальное состояние - размер: " << names.size() << std::endl;
std::cout << "Элементы: ";
for(const auto& n : names) std::cout << n << " ";
std::cout << std::endl;
// Заполнить новые элементы значением "Unknown"
names.resize(5, "Unknown");
std::cout << "\nresize(5, \"Unknown\"После ) - размер: " << names.size() << std::endl;
std::cout << "Элементы: ";
for(const auto& n : names) std::cout << n << " ";
std::cout << std::endl;
return 0;
}
Ожидаемый вывод:
初始状态 - size: 2 元素: Alice Bob resize(5, "Unknown") 后 - size: 5 元素: Alice Bob Unknown Unknown Unknown
Анализ кода:
- Использование
resize(5, "Unknown")Изменить размер до 5. - Все 3 новых добавленных элемента заполнены значением "Unknown".
Пример 3: Использование resize для уменьшения контейнера
resizeЕго также можно использовать для уменьшения контейнера.
Пример
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::cout << "Начальное состояние - размер: " << numbers.size() << std::endl;
std::cout << "Элементы: ";
for(int n : numbers) std::cout << n << " ";
std::cout << std::endl;
// Уменьшить до 5 элементов
numbers.resize(5);
std::cout << "\nПосле resize(5) - размер: " << numbers.size() << std::endl;
std::cout << "Элементы: ";
for(int n : numbers) std::cout << n << " ";
std::cout << std::endl;
return 0;
}
Ожидаемый вывод:
初始状态 - size: 10 元素: 1 2 3 4 5 6 7 8 9 10 resize(5) 后 - size: 5 元素: 1 2 3 4 5
Анализ кода:
resize(5)Изменить размер до 5.- Последние 5 элементов удалены.
Пример 4: resize и capacity
resizeизменятся одновременноsizeиcapacity。
Пример
#include <vector>
int main() {
std::vector<int> v;
// предварительно выделить память
v.reserve(100);
v.push_back(1);
v.push_back(2);
std::cout << "начальный - размер: " << v.size() << ", ёмкость: " << v.capacity() << std::endl;
// resize до большего значения
v.resize(50);
std::cout << "после resize(50) - размер: " << v.size() << ", ёмкость: " << v.capacity() << std::endl;
// resize до меньшего значения
v.resize(10);
std::cout << "после resize(10) - размер: " << v.size() << ", ёмкость: " << v.capacity() << std::endl;
return 0;
}
Ожидаемый вывод:
初始 - size: 2, capacity: 100 resize(50) 后 - size: 50, capacity: 100 resize(10) 后 - size: 10, capacity: 100
Анализ кода:
- Когда
resizeкогда значение меньше текущей ёмкости,capacityостаётся неизменной. - Когда
resizeкогда значение больше текущей ёмкости,capacityсоответственно увеличится.
Пример 5: Использование resize для создания контейнера фиксированного размера
resizeможно использовать для создания контейнера фиксированного размера.
Пример
#include <vector>
int main() {
// создать vector, содержащий 100 копий -1
std::vector<int> scores(100, -1);
std::cout << "size: " << scores.size() << std::endl;
std::cout << "first 10 elements: ";
for(int i = 0; i < 10; ++i) {
std::cout << scores[i] << " ";
}
std::cout << std::endl;
// установить значение в позиции
scores[0] = 100;
scores[1] = 95;
std::cout << "first 10 elements after modification: ";
for(int i = 0; i < 10; ++i) {
std::cout << scores[i] << " ";
}
std::cout << std::endl;
return 0;
}
Анализ кода:
- Использование
resizeМожно создать контейнер, содержащий фиксированное количество элементов. - Это полезно, когда нужно предварительно выделить контейнер фиксированного размера.
Другие расширения