std::fill - cppreference.com

From cppreference.com

Defined in header

<algorithm>

template<classForwardIt,classT>voidfill(ForwardItfirst,ForwardItlast,constT&value); (1)(constexpr since C++20)
(until C++26)template<classForwardIt,classT=typenamestd::iterator_traits<ForwardIt>::value_type>constexprvoidfill(ForwardItfirst,ForwardItlast,constT&value);(since C++26)template<classExecutionPolicy,classForwardIt,classT>voidfill(ExecutionPolicy&&policy,ForwardItfirst,ForwardItlast,constT&value); (2)(since C++17)
(until C++26)template<classExecutionPolicy,classForwardIt,classT=typenamestd::iterator_traits<ForwardIt>::value_type>voidfill(ExecutionPolicy&&policy,ForwardItfirst,ForwardItlast,constT&value);(since C++26)1) Assigns value to all elements in the target range [first, last).

2) Same as (1), but executed according to policy.

This overload participates in overload resolution only if the value of the following expression is true:

std::is_execution_policy_v<std::decay_t<ExecutionPolicy>>

(until C++20)std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>>

(since C++20)If value is not

writable

to first, the program is ill-formed.

Parameters

first, last - the pair of iterators defining the target

range

value - the value to be assigned policy - the

execution policy

to use Type requirements -ForwardIt must meet the requirements of

LegacyForwardIterator

. Complexity

Exactly std::distance(first,last) assignments.

Exceptions

2) During the execution process:

If the temporary memory resources required for parallelization are not available,

std::bad_alloc

is thrown.

If an uncaught exception is thrown while accessing objects via an algorithm argument, the behavior is determined by the execution policy (for

standard policies

,

std::terminate

is invoked).

Possible implementation

fill

template<classForwardIt,classT=typenamestd::iterator_traits<ForwardIt>::value_type>voidfill(ForwardItfirst,ForwardItlast,constT&value){for(;first!=last;++first)*first=value;}Notes

Feature-test

macroValueStdFeature

__cpp_lib_algorithm_default_value_type

202403

(C++26)

List-initialization

for algorithms (

1,2

)Example

Run this code

#include<algorithm>#include<complex>#include<iostream>#include<vector>voidprintln(constauto&seq){for(constauto&e:seq)std::cout<<e<<' ';std::cout<<'\n';}intmain(){std::vector<int>v{0,1,2,3,4,5,6,7,8};println(v);// set all of the elements to 8std::fill(v.begin(),v.end(),8);println(v);std::vector<std::complex<double>>nums{{1,3},{2,2},{4,8}};println(nums);#ifdef __cpp_lib_algorithm_default_value_typestd::fill(nums.begin(),nums.end(),{4,2});#elsestd::fill(nums.begin(),nums.end(),std::complex<double>{4,2});#endifprintln(nums);}Output:

0 1 2 3 4 5 6 7 8 8 8 8 8 8 8 8 8 8 (1,3) (2,2) (4,8) (4,2) (4,2) (4,2) Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior

LWG 283

C++98 T was required to be

CopyAssignable

, but
T is not always writable to ForwardItrequired to be writable instead See also

ranges::fill

(C++20)

assigns a range of elements a certain value
(algorithm function object)

[edit]

fill_n

copy-assigns the given value to N elements in a range
(function template & algorithm function object)

[edit]

ranges::fill_n

(C++20)

copycopy_if

(C++11)

copies a range of elements to a new location
(function template & algorithm function object)

[edit]

ranges::copyranges::copy_if

(C++20)(C++20)

generate

assigns the results of successive function calls to every element in a range
(function template & algorithm function object)

[edit]

ranges::generate

(C++20)

transform

applies a function to a range of elements, storing results in a destination range
(function template & algorithm function object)

[edit]

ranges::transform

(C++20)