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 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Defined in header <algorithm> | ||
template<class InputIt,class Size,class OutputIt> OutputIt copy_n( InputIt first, Size count, OutputIt result); | (1) | (since C++11) (constexpr since C++20) |
template<class ExecutionPolicy, class ForwardIt1,class Size,class ForwardIt2> | (2) | (since C++17) |
[
0,
count)
, performs*(result+ i)=*(first+ i).std::is_execution_policy_v<std::decay_t<ExecutionPolicy>> istrue. | (until C++20) |
std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> istrue. | (since C++20) |
Contents |
first | - | the beginning of the range of elements to copy from |
count | - | number of the elements to copy |
result | - | the beginning of the destination range |
policy | - | theexecution policy to use |
Type requirements | ||
-InputIt must meet the requirements ofLegacyInputIterator. | ||
-OutputIt must meet the requirements ofLegacyOutputIterator. | ||
-ForwardIt1, ForwardIt2 must meet the requirements ofLegacyForwardIterator. |
Iterator in the destination range, pointing past the last element copied ifcount>0 orresult otherwise.
Zero assignments ifcount<0;count assignments otherwise.
The overload with a template parameter namedExecutionPolicy
reports errors as follows:
ExecutionPolicy
is one of thestandard policies,std::terminate is called. For any otherExecutionPolicy
, the behavior is implementation-defined.template<class InputIt,class Size,class OutputIt>constexpr//< since C++20OutputIt copy_n(InputIt first, Size count, OutputIt result){if(count>0){*result=*first;++result;for(Size i=1; i!= count;++i,(void)++result)*result=*++first;} return result;} |
#include <algorithm>#include <iostream>#include <iterator>#include <numeric>#include <string>#include <vector> int main(){std::string in{"1234567890"};std::string out; std::copy_n(in.begin(),4,std::back_inserter(out));std::cout<< out<<'\n'; std::vector<int> v_in(128);std::iota(v_in.begin(), v_in.end(),1);std::vector<int> v_out(v_in.size()); std::copy_n(v_in.cbegin(),100, v_out.begin());std::cout<<std::accumulate(v_out.begin(), v_out.end(),0)<<'\n';}
Output:
12345050
(C++11) | copies a range of elements to a new location (function template)[edit] |
(C++20) | copies a number of elements to a new location (algorithm function object)[edit] |