Constrained algorithms and algorithms on ranges(C++20) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Constrained algorithms, e.g.ranges::copy,ranges::sort, ... | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Execution policies(C++17) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Numeric operations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Operations on uninitialized memory | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
std::ranges
Non-modifying sequence operations | |||||||||||||||||||||||||||||||||
Modifying sequence operations | |||||||||||||||||||||||||||||||||
Partitioning operations | |||||||||||||||||||||||||||||||||
Sorting operations | |||||||||||||||||||||||||||||||||
Binary search operations (on sorted ranges) | |||||||||||||||||||||||||||||||||
Set operations (on sorted ranges) | |||||||||||||||||||||||||||||||||
Heap operations | |||||||||||||||||||||||||||||||||
Minimum/maximum operations | |||||||||||||||||||||||||||||||||
Permutation operations | |||||||||||||||||||||||||||||||||
Fold operations | |||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
Operations on uninitialized storage | |||||||||||||||||||||||||||||||||
Return types | |||||||||||||||||||||||||||||||||
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>> requiresstd::output_iterator<O,const T&> | (since C++26) | |
Assigns the givenvalue to all elements in the range[
first,
first+ n)
.
The function-like entities described on this page arealgorithm function objects (informally known asniebloids), that is:
Contents |
first | - | the beginning of the range of elements to modify |
n | - | number of elements to modify |
value | - | the value to be assigned |
An output iterator that compares equal tofirst+ n.
Exactlyn assignments.
struct fill_n_fn{template<class O,class T=std::iter_value_t<O>> requiresstd::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;}}; inlineconstexpr fill_n_fn fill_n{}; |
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_algorithm_default_value_type | 202403 | (C++26) | List-initialization for algorithms |
#include <algorithm>#include <complex>#include <iostream>#include <string>#include <vector> void println(constauto& v){for(constauto& elem: v)std::cout<<' '<< elem;std::cout<<'\n';} int main(){constexprauto 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)
(C++20) | assigns a range of elements a certain value (algorithm function object)[edit] |
(C++20) | copies a number of elements to a new location (algorithm function object)[edit] |
(C++20) | saves the result of a function in a range (algorithm function object)[edit] |
(C++20) | applies a function to a range of elements (algorithm function object)[edit] |
(C++26) | fills a range with random numbers from a uniform random bit generator (algorithm function object)[edit] |
copy-assigns the given value to N elements in a range (function template)[edit] |