std::ranges::fill - cppreference.com

From cppreference.com

Defined in header

<algorithm>

Call signature

template<classT,std::output_iterator<constT&>O,std::sentinel_for<O>S>constexprOfill(Ofirst,Slast,constT&value); (1)(since C++20)
(until C++26)template<classO,std::sentinel_for<O>S,classT=std::iter_value_t<O>>requiresstd::output_iterator<O,constT&>constexprOfill(Ofirst,Slast,constT&value);(since C++26)template<classT,ranges::output_range<constT&>R>constexprranges::borrowed_iterator_t<R>fill(R&&r,constT&value); (2)(since C++20)
(until C++26)template<classR,classT=ranges::range_value_t<R>>requiresranges::output_range<R,constT&>constexprranges::borrowed_iterator_t<R>fill(R&&r,constT&value);(since C++26)template</*execution-policy*/Ep,std::random_access_iteratorO,std::sized_sentinel_for<O>S,classT=std::iter_value_t<O>>requiresstd::indirectly_writable<O,constT&>Ofill(Ep&&policy,Ofirst,Slast,constT&value); (3) (since C++26)template</*execution-policy*/Ep,/*sized-random-access-range*/R,classT=ranges::range_value_t<R>>requiresstd::indirectly_writable<ranges::iterator_t<R>,constT&>ranges::borrowed_iterator_t<R>fill(Ep&&policy,R&&r,constT&value); (4) (since C++26)For the definition of /*execution-policy*/, see

this page

; for the definition of /*sized-random-access-range*/, see

this page

.

1,2) Assigns value to all elements in the target range [first, last) or r.

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

The function-like entities described on this page are

algorithm function objects

(informally known as niebloids), that is:

Explicit template argument lists cannot be specified when calling any of them.

None of them are visible to

argument-dependent lookup

.

When any of them are found by

normal unqualified lookup

as the name to the left of the function-call operator,

argument-dependent lookup

is inhibited.

Parameters

first, last - the pair of iterators defining the target

range

r - the target range value - the value to be assigned policy - the

execution policy

to use Return value

The past-the-end iterator of the source range.

Complexity

Given N as ranges::distance(first,last) or ranges::distance(r):

1-4) Exactly N assignments.

Exceptions

3,4) 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

structfill_fn{template<classO,std::sentinel_for<O>S,classT=std::iter_value_t<O>>requiresstd::output_iterator<O,constT&>constexprOoperator()(Ofirst,Slast,constT&value)const{while(first!=last)*first++=value;returnfirst;}template<classR,classT=ranges::range_value_t<R>>requiresranges::output_range<R,constT&>constexprranges::borrowed_iterator_t<R>operator()(R&&r,constT&value)const{return(*this)(ranges::begin(r),ranges::end(r),value);}template<ranges::forward_rangeR,classT=ranges::range_value_t<R>>requiresranges::output_range<R,constT&>constexprranges::borrowed_iterator_t<R>operator()(R&&r,constT&value)const{return(*this)(ranges::begin(r),ranges::next(ranges::begin(r),ranges::end(r)),value);}};inlineconstexprfill_fnfill;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};// set all elements to -1 using overload (1)std::ranges::fill(v.begin(),v.end(),-1);println(v);// set all element to 10 using overload (2)std::ranges::fill(v,10);println(v);std::vector<std::complex<double>>nums{{1,3},{2,2},{4,8}};println(nums);#ifdef __cpp_lib_algorithm_default_value_typestd::ranges::fill(nums,{4,2});// T gets deduced#elsestd::ranges::fill(nums,std::complex<double>{4,2});#endifprintln(nums);}Output:

-1 -1 -1 -1 -1 -1 10 10 10 10 10 10 (1,3) (2,2) (4,8) (4,2) (4,2) (4,2) See also

fill

copy-assigns the given value to every element in a range
(function template)

[edit]

ranges::fill_n

(C++20)

assigns a value to a number of elements
(algorithm function object)

[edit]

ranges::copyranges::copy_if

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

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

[edit]

ranges::generate

(C++20)

saves the result of a function in a range
(algorithm function object)

[edit]

ranges::transform

(C++20)

applies a function to a range of elements
(algorithm function object)

[edit]

ranges::generate_random

(C++26)

fills a range with random numbers from a uniform random bit generator
(algorithm function object)

[edit]