Repository navigation
Expand file tree
/
Copy pathalg.generate.html
More file actions
27 lines (25 loc) · 12.1 KB
/
Copy pathalg.generate.html
File metadata and controls
27 lines (25 loc) · 12.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html><html lang='en'><head><title>[alg.generate]</title><meta charset='UTF-8'/><link rel='stylesheet' type='text/css' href='14882.css'/><link rel='stylesheet' type='text/css' href='expanded.css' title='Normal'/><link rel='alternate stylesheet' type='text/css' href='colored.css' title='Notes and examples colored'/><link rel='alternate stylesheet' type='text/css' href='normative-only.css' title='Notes and examples hidden'/><link rel='icon' href='icon.png'/></head><body><div class='wrapper'><h1 ><a class='secnum' style='min-width:50pt'>27</a> Algorithms library <a class='abbr_ref' href='./#algorithms'>[algorithms]</a></h1><h2 ><a class='secnum' style='min-width:65pt'>27.7</a> Mutating sequence operations <a class='abbr_ref' href='alg.modifying.operations#alg.generate'>[alg.modifying.operations]</a></h2><h3 ><a class='secnum' style='min-width:80pt'>27.7.7</a> Generate <a class='abbr_ref'>[alg.generate]</a></h3><div class='texpara'><div id='lib:generate_n'><div id='lib:generate'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:generate'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>class</span> ForwardIterator, <span class='keyword'>class</span> Generator<span class='anglebracket'>></span>
<span class='keyword'>constexpr</span> <span class='keyword'>void</span> generate<span class='parenthesis'>(</span>ForwardIterator first, ForwardIterator last,
Generator gen<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>class</span> ExecutionPolicy, <span class='keyword'>class</span> ForwardIterator, <span class='keyword'>class</span> Generator<span class='anglebracket'>></span>
<span class='keyword'>void</span> generate<span class='parenthesis'>(</span>ExecutionPolicy<span class='operator'>&</span><span class='operator'>&</span> exec,
ForwardIterator first, ForwardIterator last,
Generator gen<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>class</span> OutputIterator, <span class='keyword'>class</span> Size, <span class='keyword'>class</span> Generator<span class='anglebracket'>></span>
<span class='keyword'>constexpr</span> OutputIterator generate_n<span class='parenthesis'>(</span>OutputIterator first, Size n, Generator gen<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>class</span> ExecutionPolicy, <span class='keyword'>class</span> ForwardIterator, <span class='keyword'>class</span> Size, <span class='keyword'>class</span> Generator<span class='anglebracket'>></span>
ForwardIterator generate_n<span class='parenthesis'>(</span>ExecutionPolicy<span class='operator'>&</span><span class='operator'>&</span> exec,
ForwardIterator first, Size n, Generator gen<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='iterator.concept.iterator#concept:input_or_output_iterator' title='25.3.4.6 Concept input_­or_­output_­iterator [iterator.concept.iterator]'><span id='conceptref:input_or_output_iterator'><span class='texttt'>input_<span class='shy'></span>or_<span class='shy'></span>output_<span class='shy'></span>iterator</span></span></a> O, <a href='iterator.concept.sentinel#concept:sentinel_for' title='25.3.4.7 Concept sentinel_­for [iterator.concept.sentinel]'><span id='conceptref:sentinel_for'><span class='texttt'>sentinel_<span class='shy'></span>for</span></span></a><span class='anglebracket'><</span>O<span class='anglebracket'>></span> S, <a href='concept.copyconstructible#concept:copy_constructible' title='18.4.14 Concept copy_­constructible [concept.copyconstructible]'><span id='conceptref:copy_constructible'><span class='texttt'>copy_<span class='shy'></span>constructible</span></span></a> F<span class='anglebracket'>></span>
<span class='keyword'>requires</span> <a href='concept.invocable#concept:invocable' title='18.7.2 Concept invocable [concept.invocable]'><span id='conceptref:invocable'><span class='texttt'>invocable</span></span></a><span class='anglebracket'><</span>F<span class='operator'>&</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='iterator.concept.writable#concept:indirectly_writable' title='25.3.4.3 Concept indirectly_­writable [iterator.concept.writable]'><span id='conceptref:indirectly_writable'><span class='texttt'>indirectly_<span class='shy'></span>writable</span></span></a><span class='anglebracket'><</span>O, invoke_result_t<span class='anglebracket'><</span>F<span class='operator'>&</span><span class='anglebracket'>></span><span class='anglebracket'>></span>
<span class='keyword'>constexpr</span> O ranges<span class='operator'>::</span>generate<span class='parenthesis'>(</span>O first, S last, F gen<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>class</span> R, <a href='concept.copyconstructible#concept:copy_constructible' title='18.4.14 Concept copy_­constructible [concept.copyconstructible]'><span id='conceptref:copy_constructible_'><span class='texttt'>copy_<span class='shy'></span>constructible</span></span></a> F<span class='anglebracket'>></span>
<span class='keyword'>requires</span> <a href='concept.invocable#concept:invocable' title='18.7.2 Concept invocable [concept.invocable]'><span id='conceptref:invocable_'><span class='texttt'>invocable</span></span></a><span class='anglebracket'><</span>F<span class='operator'>&</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='range.refinements#concept:output_range' title='26.4.5 Other range refinements [range.refinements]'><span id='conceptref:output_range'><span class='texttt'>output_<span class='shy'></span>range</span></span></a><span class='anglebracket'><</span>R, invoke_result_t<span class='anglebracket'><</span>F<span class='operator'>&</span><span class='anglebracket'>></span><span class='anglebracket'>></span>
<span class='keyword'>constexpr</span> borrowed_iterator_t<span class='anglebracket'><</span>R<span class='anglebracket'>></span> ranges<span class='operator'>::</span>generate<span class='parenthesis'>(</span>R<span class='operator'>&</span><span class='operator'>&</span> r, F gen<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='iterator.concept.iterator#concept:input_or_output_iterator' title='25.3.4.6 Concept input_­or_­output_­iterator [iterator.concept.iterator]'><span id='conceptref:input_or_output_iterator_'><span class='texttt'>input_<span class='shy'></span>or_<span class='shy'></span>output_<span class='shy'></span>iterator</span></span></a> O, <a href='concept.copyconstructible#concept:copy_constructible' title='18.4.14 Concept copy_­constructible [concept.copyconstructible]'><span id='conceptref:copy_constructible__'><span class='texttt'>copy_<span class='shy'></span>constructible</span></span></a> F<span class='anglebracket'>></span>
<span class='keyword'>requires</span> <a href='concept.invocable#concept:invocable' title='18.7.2 Concept invocable [concept.invocable]'><span id='conceptref:invocable__'><span class='texttt'>invocable</span></span></a><span class='anglebracket'><</span>F<span class='operator'>&</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='iterator.concept.writable#concept:indirectly_writable' title='25.3.4.3 Concept indirectly_­writable [iterator.concept.writable]'><span id='conceptref:indirectly_writable_'><span class='texttt'>indirectly_<span class='shy'></span>writable</span></span></a><span class='anglebracket'><</span>O, invoke_result_t<span class='anglebracket'><</span>F<span class='operator'>&</span><span class='anglebracket'>></span><span class='anglebracket'>></span>
<span class='keyword'>constexpr</span> O ranges<span class='operator'>::</span>generate_n<span class='parenthesis'>(</span>O first, iter_difference_t<span class='anglebracket'><</span>O<span class='anglebracket'>></span> n, F gen<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='1'><div class='marginalizedparent'><a class='marginalized' href='#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/cplusplus/draft/tree/1be4801ac1f90aca9a8f5804a48e8bcd082f5bb9/source/algorithms.tex#L5683'>#</a></div><div class='texpara'><div id='1.sentence-1' class='sentence'>Let <span class='math'><span class='mathalpha'>N</span></span> be <span class='math'><span class="mathrm">max</span>(0, <span class='texttt'>n</span>)</span> for the <span class='texttt'>generate_<span class='shy'></span>n</span> algorithms, and
<span class='texttt'>last <span class='operator'>-</span> first</span> for the <span class='texttt'>generate</span> algorithms<a class='hidden_link' href='#1.sentence-1'>.</a></div></div></div></div><div class='para' id='2'><div class='marginalizedparent'><a class='marginalized' href='#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/cplusplus/draft/tree/1be4801ac1f90aca9a8f5804a48e8bcd082f5bb9/source/algorithms.tex#L5687'>#</a></div><div class='texpara'><div id='2.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>Size</span> is convertible
to an integral type (<a href='conv.integral' title='7.3.9 Integral conversions'>[conv.<span class='shy'></span>integral]</a>, <a href='class.conv' title='11.4.8 Conversions'>[class.<span class='shy'></span>conv]</a>)<a class='hidden_link' href='#2.sentence-1'>.</a></div></div></div></div><div class='para' id='3'><div class='marginalizedparent'><a class='marginalized' href='#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/cplusplus/draft/tree/1be4801ac1f90aca9a8f5804a48e8bcd082f5bb9/source/algorithms.tex#L5692'>#</a></div><div class='texpara'><div id='3.sentence-1' class='sentence'><i >Effects</i>: Assigns the result of successive evaluations of <span class='texttt'>gen<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
through each iterator in the range [<span class='texttt'>first, first <span class='operator'>+</span> <span class='math'><span class='mathalpha'>N</span></span></span>)<a class='hidden_link' href='#3.sentence-1'>.</a></div></div></div></div><div class='para' id='4'><div class='marginalizedparent'><a class='marginalized' href='#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/cplusplus/draft/tree/1be4801ac1f90aca9a8f5804a48e8bcd082f5bb9/source/algorithms.tex#L5697'>#</a></div><div class='texpara'><div id='4.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>first <span class='operator'>+</span> <span class='math'><span class='mathalpha'>N</span></span></span><a class='hidden_link' href='#4.sentence-1'>.</a></div></div></div></div><div class='para' id='5'><div class='marginalizedparent'><a class='marginalized' href='#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/cplusplus/draft/tree/1be4801ac1f90aca9a8f5804a48e8bcd082f5bb9/source/algorithms.tex#L5701'>#</a></div><div class='texpara'><div id='5.sentence-1' class='sentence'><i >Complexity</i>: Exactly <span class='math'><span class='mathalpha'>N</span></span> evaluations of <span class='texttt'>gen<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> and assignments<a class='hidden_link' href='#5.sentence-1'>.</a></div></div></div></div></div></body></html>