std::ranges::fill_n(3)
std::ranges::fill_n(3)
okay bestie, welcome to the std::ranges::fill_n page from the C++ Standard Libary manual β yes, thatβs literally how the header spells βLibary,β not me π. Itβs giving C++20/26 algorithm energy and Iβm obsessed.
π NAME π
std::ranges::fill_n β std::ranges::fill_n (the name is the name, iconic π
)
β¨ Synopsis β¨
Defined in header <algorithm>.
Call signature:
template< class T, std::output_iterator<const T&> O >
constexpr O fill_n( O first, std::iter_difference_t<O> n, const T& value );
(since C++20) (until C++26)
template< class O, class T = std::iter_value_t<O> >
requires std::output_iterator<O, const T&>
constexpr O fill_n( O first, std::iter_difference_t<O> n, const T& value );
(since C++26)
Assigns the given value to all elements in the range [first, first + n).
The function-like entities described on this page are 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.
In practice, they may be implemented as function objects, or with special compiler extensions.
πΈ Parameters πΈ
firstβ the beginning of the range of elements to modifynβ number of elements to modifyvalueβ the value to be assigned
π¦ Return value π¦
An output iterator that compares equal to first + n.
β Complexity β
Exactly n assignments.
π§ Possible implementation π§
struct fill_n_fn
{
template<class O, class T = std::iter_value_t<O>>
requires std::output_iterator<O, const T&>
constexpr O operator()(O first, std::iter_difference_t<O> n, const T& value) const
{
for (std::iter_difference_t<O> i {}; i != n; ++first, ++i)
*first = value;
return first;
}
};
inline constexpr fill_n_fn fill_n {};
π Notes π
- Feature-test macro:
__cpp_lib_algorithm_default_value_typeβ value202403, std(C++26), feature: List-initialization for algorithms
π Example π
// Run this code
#include <algorithm>
#include <complex>
#include <iostream>
#include <string>
#include <vector>
void println(const auto& v)
{
for (const auto& elem : v)
std::cout << ' ' << elem;
std::cout << '\n';
}
int main()
{
constexpr auto n{8};
std::vector<std::string> v(n, "ββββ");
println(v);
std::ranges::fill_n(v.begin(), n, "ββββ");
println(v);
std::vector<std::complex<double>> nums{{1, 3}, {2, 2}, {4, 8}};
println(nums);
#ifdef __cpp_lib_algorithm_default_value_type
std::ranges::fill_n(nums.begin(), 2, {4, 2});
#else
std::ranges::fill_n(nums.begin(), 2, std::complex<double>{4, 2});
#endif
println(nums);
}
π Output π
ββββ ββββ ββββ ββββ ββββ ββββ ββββ ββββ
ββββ ββββ ββββ ββββ ββββ ββββ ββββ ββββ
(1,3) (2,2) (4,8)
(4,2) (4,2) (4,8)
π₯ See also π₯
ranges::fill(C++20) β assigns a range of elements a certain value (niebloid)ranges::copy_n(C++20) β copies a number of elements to a new location (niebloid)ranges::generate(C++20) β saves the result of a function in a range (niebloid)ranges::transform(C++20) β applies a function to a range of elements (niebloid)ranges::generate_random(C++26) β fills a range with random numbers from a uniform random bit generator (niebloid)fill_nβ copy-assigns the given value to N elements in a range (function template)
π source http://cppreference.com Β· version/date 2024.06.10 Β· page std::ranges::fill_n(3) β mwah, thatβs the whole page bestie π«Άβ¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms