std::fill
Определено в заголовке <algorithm> | ||
|---|---|---|
| (1) | ||
template< class ForwardIt, class T > void fill( ForwardIt first, ForwardIt last, const T& value ); | (до C++20) | |
template< class ForwardIt, class T > constexpr void fill( ForwardIt first, ForwardIt last, const T& value ); | (с C++20) | |
template< class ExecutionPolicy, class ForwardIt, class T >
void fill( ExecutionPolicy&& policy,
ForwardIt first, ForwardIt last, const T& value );
| (2) | (с C++17) |
1) Присваивает заданное значение
value элементам в диапазоне [first, last).
2) То же, что и (1), но выполняется в соответствии с
policy. Эта перегрузка не участвует в разрешении перегрузки, если |
| (до C++20) |
|
| (с C++20) |
Параметры
| first, last | - | диапазон элементов для изменения |
| value | - | значение, которое необходимо присвоить |
| policy | - | политика выполнения. Подробности см. в политике выполнения. |
| Требования к типу | ||
-ForwardIt должен удовлетворять требованиям LegacyForwardIterator. |
||
-value должен быть записываемым в first. |
||
Возвращаемое значение
(нет)
Сложность
Точно std::distance(first, last) присваиваний.
Исключения
Перегрузка с шаблоным параметром, имеющим имя ExecutionPolicy, сообщает об ошибках следующим образом:
- Если выполнение функции, вызванной в рамках алгоритма, выбрасывает исключение, и
ExecutionPolicyявляется одной из стандартных политик, вызываетсяstd::terminate. Для любой другойExecutionPolicy, поведение определяется реализацией. - Если алгоритм не может выделить память, выбрасывается
std::bad_alloc.
Возможная реализация
template<class ForwardIt, class T>
void fill(ForwardIt first, ForwardIt last, const T& value)
{
for (; first != last; ++first)
*first = value;
} |
Пример
Следующий код использует fill() для установки всех элементов std::vector<int> в -1:
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
std::fill(v.begin(), v.end(), -1);
for (auto elem : v)
std::cout << elem << ' ';
std::cout << '\n';
}Вывод:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
Отчеты об ошибках
Следующие отчеты об ошибках, изменяющих поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применен к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| LWG 283 | C++98 |
T должно было быть CopyAssignable, ноT не всегда записывается в ForwardIt | требуется возможность записи |
См. также
| копирует заданное значение в N элементов в диапазоне (функция-шаблон) |
|
|
(C++11) | копирует диапазон элементов в новое местоположение (функция-шаблон) |
| присваивает результаты последовательных вызовов функций каждому элементу в диапазоне (функция-шаблон) |
|
| применяет функцию к диапазону элементов, сохраняя результаты в целевом диапазоне (функция-шаблон) |
|
|
(C++20) | присваивает диапазону элементов определенное значение (niebloid) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/algorithm/fill