Skip to main content

std::ranges::fill() algorithm

// (1)
template<
class T,
std::output_iterator<const T&> O,
std::sentinel_for<O> S
>
constexpr O fill( O first, S last, const T& value );

// (2)
template<
class T,
ranges::output_range<const T&> R
>
constexpr ranges::borrowed_iterator_t<R> fill( R&& r, const T& value );

The type of arguments are generic and have the following constraints:

  • T - (none)
  • O - std::output_iterator<const T&>
  • S - std::sentinel_for<O>
  • (2) - R - std::ranges::output_range<const T&>
  • (1) Assigns the given value to the elements in the range [first; last).
  • (2) Same as (1), but uses r as the source range, as if using ranges::begin(r) as first and ranges::end(r) as last.

The function-like entities described on this page are niebloids.

Parameters​

first
last

The range of elements to examine.

r

The range of elements to examine.

value

The value to assign.

Return value​

An output iterator that compares equal to last.

Complexity​

Exactly last - first assignments.

Exceptions​

(none)

Possible implementation​

ranges::fill
struct fill_fn
{
template<class T, std::output_iterator<const T&> O, std::sentinel_for<O> S>
constexpr O operator()(O first, S last, const T& value) const
{
while (first != last)
*first++ = value;

return first;
}

template<class T, ranges::output_range<const T&> R>
constexpr ranges::borrowed_iterator_t<R> operator()(R&& r, const T& value) const
{
return (*this)(ranges::begin(r), ranges::end(r), value);
}
};

inline constexpr fill_fn fill;

Examples​

The following code uses ranges::fill to set all elements of std::vector<int> first to -1, then to 10.

Main.cpp
#include <algorithm>
#include <iostream>
#include <vector>

void println(std::vector<int> const& vi)
{
for (int e : vi)
std::cout << e << ' ';
std::cout << '\n';
}

int main()
{
std::vector<int> v {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

std::ranges::fill(v.begin(), v.end(), -1);
println(v);

std::ranges::fill(v, 10);
println(v);
}
Output
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
10 10 10 10 10 10 10 10 10 10
This article originates from this CppReference page. It was likely altered for improvements or editors' preference. Click "Edit this page" to see all changes made to this document.
Hover to see the original license.

std::ranges::fill() algorithm

// (1)
template<
class T,
std::output_iterator<const T&> O,
std::sentinel_for<O> S
>
constexpr O fill( O first, S last, const T& value );

// (2)
template<
class T,
ranges::output_range<const T&> R
>
constexpr ranges::borrowed_iterator_t<R> fill( R&& r, const T& value );

The type of arguments are generic and have the following constraints:

  • T - (none)
  • O - std::output_iterator<const T&>
  • S - std::sentinel_for<O>
  • (2) - R - std::ranges::output_range<const T&>
  • (1) Assigns the given value to the elements in the range [first; last).
  • (2) Same as (1), but uses r as the source range, as if using ranges::begin(r) as first and ranges::end(r) as last.

The function-like entities described on this page are niebloids.

Parameters​

first
last

The range of elements to examine.

r

The range of elements to examine.

value

The value to assign.

Return value​

An output iterator that compares equal to last.

Complexity​

Exactly last - first assignments.

Exceptions​

(none)

Possible implementation​

ranges::fill
struct fill_fn
{
template<class T, std::output_iterator<const T&> O, std::sentinel_for<O> S>
constexpr O operator()(O first, S last, const T& value) const
{
while (first != last)
*first++ = value;

return first;
}

template<class T, ranges::output_range<const T&> R>
constexpr ranges::borrowed_iterator_t<R> operator()(R&& r, const T& value) const
{
return (*this)(ranges::begin(r), ranges::end(r), value);
}
};

inline constexpr fill_fn fill;

Examples​

The following code uses ranges::fill to set all elements of std::vector<int> first to -1, then to 10.

Main.cpp
#include <algorithm>
#include <iostream>
#include <vector>

void println(std::vector<int> const& vi)
{
for (int e : vi)
std::cout << e << ' ';
std::cout << '\n';
}

int main()
{
std::vector<int> v {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

std::ranges::fill(v.begin(), v.end(), -1);
println(v);

std::ranges::fill(v, 10);
println(v);
}
Output
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
10 10 10 10 10 10 10 10 10 10
This article originates from this CppReference page. It was likely altered for improvements or editors' preference. Click "Edit this page" to see all changes made to this document.
Hover to see the original license.