C++ <array> функция fill

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


fillиспользуется в array дляЗаполнить все элементыФункция, которая может быстро установить все элементы в одно и то же значение.

fillявляется функцией-членом класса контейнера, используемой дляУстановить все элементы в контейнере в указанное значение.Это операция O(n), требующая перебора всех элементов.

fillЯвляется сокращением для инициализации или сброса массива.

Определения слов: fillОзначает "fill", т. е. установку всех элементов в указанное значение.


Базовый синтаксис и параметры

fillЯвляется функцией-членом класса контейнера, требующей указанного значения заполнения.

Формат синтаксиса

void fill(const T& value);

Описание параметра

  • Параметр: value
    • Тип: такой же, как тип элемента контейнера
    • Описание: значение, которым заполняются все элементы.

Описание функции

  • Возвращаемое значение: void(Нет возвращаемого значения).
  • Эффект: Установить каждый элемент контейнера вvalue。
  • Примечание: fillизменяет все элементы в контейнере.

Пример

Давайте тщательно освоим это на серии примеров.fillИспользование.

Пример 1: Базовое использование — заполнение одним и тем же значением

Пример

#include <iostream>
#include <array>

int main() {
    std::array<int, 5> numbers = {1, 2, 3, 4, 5};

    std::cout << "Перед заполнением: ";
    for(int n : numbers) {
        std::cout << n << " ";
    }
    std::cout << std::endl;

    // Заполнить все элементы значением 0
    numbers.fill(0);

    std::cout << "После заполнения: ";
    for(int n : numbers) {
        std::cout << n << " ";
    }
    std::cout << std::endl;

    return 0;
}

Ожидаемый результат выполнения:

填充前: 1 2 3 4 5
填充后: 0 0 0 0 0

Анализ кода:

  1. numbers.fill(0)Установить все 5 элементов в 0.
  2. Это операция O(n), проходящая по всем элементам и присваивающая значения.

Пример 2: Инициализация конкретным значением

Использованиеfillможет быстро инициализировать массив.

Пример

#include <iostream>
#include <array>
#include <string>

int main() {
    // Создать и инициализировать значением -1
    std::array<int, 10> scores;
    scores.fill(-1);

    std::cout << "Инициализировано значением -1: ";
    for(int s : scores) {
        std::cout << s << " ";
    }
    std::cout << std::endl;

    // Создать и инициализировать пустой строкой
    std::array<std::string, 3> names;
    names.fill("Неизвестно");

    std::cout << "Инициализировано значением Неизвестно: ";
    for(const auto& n : names) {
        std::cout << n << " ";
    }
    std::cout << std::endl;

    return 0;
}

Ожидаемый результат выполнения:

初始化为 -1: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
初始化为 Unknown: Unknown Unknown Unknown

Анализ кода:

  • fillМожно использовать для быстрой инициализации массива любого типа.
  • Для целых чисел обычно используется 0 или -1; для строк обычно используется пустая строка или определённый заполнитель.
  • Пример 3: Сброс массива

    fillможно использовать для сброса массива в исходное состояние.

    Пример

    #include <iostream>
    #include <array>

    int main() {
        std::array<int, 5> buffer;

        // Инициализировать значениями 1-5
        for(int i = 0; i < 5; ++i) {
            buffer[i] = i + 1;
        }

        std::cout << "Исходные данные: ";
        for(int n : buffer) std::cout << n << " ";
        std::cout << std::endl;

        // Имитация сброса после использования buffer
        buffer.fill(0);

        std::cout << "После сброса: ";
        for(int n : buffer) std::cout << n << " ";
        std::cout << std::endl;

        return 0;
    }

    Ожидаемый результат выполнения:

    初始数据: 1 2 3 4 5
    重置后: 0 0 0 0 0
    

    Анализ кода:

    • fillПозволяет быстро сбросить массив в известное состояние.
    • Это полезно, когда один и тот же буфер необходимо использовать несколько раз.

    Пример 4: Использование fill с std::generate

    fillиспользуется вместе с алгоритмами STL.

    Пример

    #include <iostream>
    #include <array>
    #include <algorithm>

    int main() {
        std::array<int, 10> numbers;

        // Используйте fill для заполнения начальных значений
        numbers.fill(1);

        std::cout << "После fill 1: ";
        for(int n : numbers) std::cout << n << " ";
        std::cout << std::endl;

        // Увеличить каждый элемент
        for(auto& n : numbers) {
            n *= 2;
        }

        std::cout << "После удвоения: ";
        for(int n : numbers) std::cout << n << " ";
        std::cout << std::endl;

        return 0;
    }

    Анализ кода:

    • fillиспользуется для установки начальных значений.
    • После этого его можно дополнительно обработать с помощью циклов или алгоритмов.

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

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