C <vector> функция resize

класс контейнера C++ <vector>


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 <iostream>
#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

Анализ кода:

  1. Изначально есть 3 элемента: 1, 2, 3.
  2. resize(10)Изменить размер до 10.
  3. 7 вновь добавленных элементов инициализируются значением 0.

Пример 2: Заполнение новых элементов указанным значением

Вы можетеresizeукажите значение заполнения, когда.

Пример

#include <iostream>
#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 <iostream>
#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 <iostream>
#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 <iostream>
#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Можно создать контейнер, содержащий фиксированное количество элементов.
  • Это полезно, когда нужно предварительно выделить контейнер фиксированного размера.

класс контейнера C++ <vector>

Другие расширения