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 | ||
(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); | (since C++20) (until C++26) | |
template<class O,std::sentinel_for<O> S,class T=std::iter_value_t<O>> requiresstd::output_iterator<O,const T&> | (since C++26) | |
(2) | ||
template<class T,ranges::output_range<const T&> R> constexprranges::borrowed_iterator_t<R> fill( R&& r,const T& value); | (since C++20) (until C++26) | |
template<class R,class T=ranges::range_value_t<R>> requiresranges::output_range<R,const T&> | (since C++26) | |
[
first,
last)
.The function-like entities described on this page arealgorithm function objects (informally known asniebloids), that is:
Contents |
first, last | - | the iterator-sentinel pair defining therange of elements to modify |
r | - | the range of elements to modify |
value | - | the value to be assigned |
An output iterator that compares equal tolast.
Exactlylast- first assignments.
struct fill_fn{template<class O,std::sentinel_for<O> S,class T=std::iter_value_t<O>> requiresstd::output_iterator<O,const T&>constexpr O operator()(O first, S last,const T& value)const{while(first!= last)*first++= value; return first;} template<class R,class T=ranges::range_value_t<R>> requiresranges::output_range<R,const T&>constexprranges::borrowed_iterator_t<R> operator()(R&& r,const T& value)const{return(*this)(ranges::begin(r),ranges::end(r), value);}}; inlineconstexpr fill_fn fill; |
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_algorithm_default_value_type | 202403 | (C++26) | List-initialization for algorithms(1,2) |
#include <algorithm>#include <complex>#include <iostream>#include <vector> void println(constauto& seq){for(constauto& e: seq)std::cout<< e<<' ';std::cout<<'\n';} int main(){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_type std::ranges::fill(nums,{4,2});// T gets deduced#else std::ranges::fill(nums,std::complex<double>{4,2});#endif println(nums);}
Output:
-1 -1 -1 -1 -1 -110 10 10 10 10 10(1,3) (2,2) (4,8)(4,2) (4,2) (4,2)
(C++20) | assigns a value to a number of elements (algorithm function object)[edit] |
(C++20)(C++20) | copies a range 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 every element in a range (function template)[edit] |