Files
allhaileris afb81b8278
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
init
2026-02-16 15:50:16 +03:00

944 lines
88 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Range-v3: Examples</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">Range-v3
</div>
<div id="projectbrief">Range algorithms, views, and actions for the Standard Library</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.svg"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('md_examples.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">Examples </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="example-algorithms"></a>
Examples: Algorithms</h1>
<h2><a class="anchor" id="example-hello"></a>
Hello, Ranges!</h2>
<div class="fragment"><div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="all_8hpp.html">range/v3/all.hpp</a>&gt;</span> <span class="comment">// get everything</span></div>
<div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><span class="keyword">using </span>std::cout;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span></div>
<div class="line">main()</div>
<div class="line">{</div>
<div class="line"> std::string s{<span class="stringliteral">&quot;hello&quot;</span>};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// output: h e l l o</span></div>
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(s, [](<span class="keywordtype">char</span> c) { cout &lt;&lt; c &lt;&lt; <span class="charliteral">&#39; &#39;</span>; });</div>
<div class="line"> cout &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line">}</div>
<div class="ttc" id="aall_8hpp_html"><div class="ttname"><a href="all_8hpp.html">all.hpp</a></div></div>
<div class="ttc" id="agroup__runtime_html_ga8beaba5ae537715c97e180b05160cc03"><div class="ttname"><a href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">meta::for_each</a></div><div class="ttdeci">constexpr auto &amp;&amp; for_each</div><div class="ttdoc">for_each(List, UnaryFunction) calls the UnaryFunction for each argument in the List.</div><div class="ttdef"><b>Definition:</b> meta.hpp:2876</div></div>
</div><!-- fragment --><h2><a class="anchor" id="example-any-all-none"></a>
any_of, all_of, none_of</h2>
<div class="fragment"><div class="line"><span class="comment">// Demonstrates any_of, all_of, none_of</span></div>
<div class="line"><span class="comment">// output</span></div>
<div class="line"><span class="comment">// vector: [6,2,3,4,5,6]</span></div>
<div class="line"><span class="comment">// vector any_of is_six: true</span></div>
<div class="line"><span class="comment">// vector all_of is_six: false</span></div>
<div class="line"><span class="comment">// vector none_of is_six: false</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="all__of_8hpp.html">range/v3/algorithm/all_of.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="any__of_8hpp.html">range/v3/algorithm/any_of.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="algorithm_2for__each_8hpp.html">range/v3/algorithm/for_each.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="none__of_8hpp.html">range/v3/algorithm/none_of.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="view_2all_8hpp.html">range/v3/view/all.hpp</a>&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><span class="keyword">using </span>std::cout;</div>
<div class="line"> </div>
<div class="line"><span class="keyword">auto</span> is_six = [](<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> i == 6; };</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span></div>
<div class="line">main()</div>
<div class="line">{</div>
<div class="line"> std::vector&lt;int&gt; v{6, 2, 3, 4, 5, 6};</div>
<div class="line"> cout &lt;&lt; std::boolalpha;</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;vector: &quot;</span> &lt;&lt; ranges::views::all(v) &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> </div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;vector any_of is_six: &quot;</span> &lt;&lt; <a class="code hl_typedef" href="group__query.html#ga458c0596c85f41edc60b5230e76087e1">ranges::any_of</a>(v, is_six) &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;vector all_of is_six: &quot;</span> &lt;&lt; <a class="code hl_typedef" href="group__query.html#gae65ae2955249d7b8322e1135f680103b">ranges::all_of</a>(v, is_six) &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;vector none_of is_six: &quot;</span> &lt;&lt; <a class="code hl_typedef" href="group__query.html#ga0722ed3a3840cbeffd4d49876abbd7d8">ranges::none_of</a>(v, is_six) &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line">}</div>
<div class="ttc" id="aalgorithm_2for__each_8hpp_html"><div class="ttname"><a href="algorithm_2for__each_8hpp.html">for_each.hpp</a></div></div>
<div class="ttc" id="aall__of_8hpp_html"><div class="ttname"><a href="all__of_8hpp.html">all_of.hpp</a></div></div>
<div class="ttc" id="aany__of_8hpp_html"><div class="ttname"><a href="any__of_8hpp.html">any_of.hpp</a></div></div>
<div class="ttc" id="agroup__query_html_ga0722ed3a3840cbeffd4d49876abbd7d8"><div class="ttname"><a href="group__query.html#ga0722ed3a3840cbeffd4d49876abbd7d8">meta::none_of</a></div><div class="ttdeci">empty&lt; find_if&lt; L, Fn &gt; &gt; none_of</div><div class="ttdoc">A Boolean integral constant wrapper around true if invoke&lt;Fn, A&gt;::value is false for all elements A i...</div><div class="ttdef"><b>Definition:</b> meta.hpp:3063</div></div>
<div class="ttc" id="agroup__query_html_ga458c0596c85f41edc60b5230e76087e1"><div class="ttname"><a href="group__query.html#ga458c0596c85f41edc60b5230e76087e1">meta::any_of</a></div><div class="ttdeci">not_&lt; empty&lt; find_if&lt; L, Fn &gt; &gt; &gt; any_of</div><div class="ttdoc">A Boolean integral constant wrapper around true if invoke&lt;Fn, A&gt;::value is true for any element A in ...</div><div class="ttdef"><b>Definition:</b> meta.hpp:3045</div></div>
<div class="ttc" id="agroup__query_html_gae65ae2955249d7b8322e1135f680103b"><div class="ttname"><a href="group__query.html#gae65ae2955249d7b8322e1135f680103b">meta::all_of</a></div><div class="ttdeci">empty&lt; find_if&lt; L, not_fn&lt; Fn &gt; &gt; &gt; all_of</div><div class="ttdoc">A Boolean integral constant wrapper around true if invoke&lt;Fn, A&gt;::value is true for all elements A in...</div><div class="ttdef"><b>Definition:</b> meta.hpp:3027</div></div>
<div class="ttc" id="anone__of_8hpp_html"><div class="ttname"><a href="none__of_8hpp.html">none_of.hpp</a></div></div>
<div class="ttc" id="aview_2all_8hpp_html"><div class="ttname"><a href="view_2all_8hpp.html">all.hpp</a></div></div>
</div><!-- fragment --><h2><a class="anchor" id="example-count"></a>
count</h2>
<div class="fragment"><div class="line"><span class="comment">// This example demonstrates counting the number of</span></div>
<div class="line"><span class="comment">// elements that match a given value.</span></div>
<div class="line"><span class="comment">// output...</span></div>
<div class="line"><span class="comment">// vector: 2</span></div>
<div class="line"><span class="comment">// array: 2</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="count_8hpp.html">range/v3/algorithm/count.hpp</a>&gt;</span> <span class="comment">// specific includes</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><span class="keyword">using </span>std::cout;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span></div>
<div class="line">main()</div>
<div class="line">{</div>
<div class="line"> std::vector&lt;int&gt; v{6, 2, 3, 4, 5, 6};</div>
<div class="line"> <span class="comment">// note the count return is a numeric type</span></div>
<div class="line"> <span class="comment">// like int or long -- auto below make sure</span></div>
<div class="line"> <span class="comment">// it matches the implementation</span></div>
<div class="line"> <span class="keyword">auto</span> c = <a class="code hl_typedef" href="group__query.html#ga8a395b36c7a028e67cf7cbaa28ab3ccc">ranges::count</a>(v, 6);</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;vector: &quot;</span> &lt;&lt; c &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> </div>
<div class="line"> std::array&lt;int, 6&gt; a{6, 2, 3, 4, 5, 6};</div>
<div class="line"> c = <a class="code hl_typedef" href="group__query.html#ga8a395b36c7a028e67cf7cbaa28ab3ccc">ranges::count</a>(a, 6);</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;array: &quot;</span> &lt;&lt; c &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="ttc" id="acount_8hpp_html"><div class="ttname"><a href="count_8hpp.html">count.hpp</a></div></div>
<div class="ttc" id="agroup__query_html_ga8a395b36c7a028e67cf7cbaa28ab3ccc"><div class="ttname"><a href="group__query.html#ga8a395b36c7a028e67cf7cbaa28ab3ccc">meta::count</a></div><div class="ttdeci">_t&lt; detail::count_&lt; L, T &gt; &gt; count</div><div class="ttdoc">Count the number of times a type T appears in the list L.</div><div class="ttdef"><b>Definition:</b> meta.hpp:2725</div></div>
</div><!-- fragment --><h2><a class="anchor" id="example-count_if"></a>
count_if</h2>
<div class="fragment"><div class="line"><span class="comment">// This example counts element of a range that match a supplied predicate.</span></div>
<div class="line"><span class="comment">// output</span></div>
<div class="line"><span class="comment">// vector: 2</span></div>
<div class="line"><span class="comment">// array: 2</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;array&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="count__if_8hpp.html">range/v3/algorithm/count_if.hpp</a>&gt;</span> <span class="comment">// specific includes</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><span class="keyword">using </span>std::cout;</div>
<div class="line"> </div>
<div class="line"><span class="keyword">auto</span> is_six = [](<span class="keywordtype">int</span> i) -&gt; <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> i == 6; };</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span></div>
<div class="line">main()</div>
<div class="line">{</div>
<div class="line"> std::vector&lt;int&gt; v{6, 2, 3, 4, 5, 6};</div>
<div class="line"> <span class="keyword">auto</span> c = <a class="code hl_typedef" href="group__query.html#ga665bd44f6d231438a3200df8030f593a">ranges::count_if</a>(v, is_six);</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;vector: &quot;</span> &lt;&lt; c &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>; <span class="comment">// 2</span></div>
<div class="line"> </div>
<div class="line"> std::array&lt;int, 6&gt; a{6, 2, 3, 4, 5, 6};</div>
<div class="line"> c = <a class="code hl_typedef" href="group__query.html#ga665bd44f6d231438a3200df8030f593a">ranges::count_if</a>(a, is_six);</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;array: &quot;</span> &lt;&lt; c &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>; <span class="comment">// 2</span></div>
<div class="line">}</div>
<div class="ttc" id="acount__if_8hpp_html"><div class="ttname"><a href="count__if_8hpp.html">count_if.hpp</a></div></div>
<div class="ttc" id="agroup__query_html_ga665bd44f6d231438a3200df8030f593a"><div class="ttname"><a href="group__query.html#ga665bd44f6d231438a3200df8030f593a">meta::count_if</a></div><div class="ttdeci">_t&lt; detail::count_if_&lt; L, Fn &gt; &gt; count_if</div><div class="ttdoc">Count the number of times the predicate Fn evaluates to true for all the elements in the list L.</div><div class="ttdef"><b>Definition:</b> meta.hpp:2787</div></div>
</div><!-- fragment --><h2><a class="anchor" id="example-find"></a>
find, find_if, find_if_not on sequence containers</h2>
<div class="fragment"><div class="line"><span class="comment">// vector: *i: 6</span></div>
<div class="line"><span class="comment">// didn&#39;t find 10</span></div>
<div class="line"><span class="comment">// *i: 6</span></div>
<div class="line"><span class="comment">// *i: 2</span></div>
<div class="line"><span class="comment">// *i after ++ (2 expected): 2</span></div>
<div class="line"><span class="comment">// array: *i: 6</span></div>
<div class="line"><span class="comment">// list: *i: 6</span></div>
<div class="line"><span class="comment">// fwd_list: *i: 4</span></div>
<div class="line"><span class="comment">// deque: *i: 6</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;array&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;deque&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;forward_list&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;list&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="all_8hpp.html">range/v3/all.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><span class="keyword">using </span>std::cout;</div>
<div class="line"> </div>
<div class="line"><span class="keyword">auto</span> is_six = [](<span class="keywordtype">int</span> i) -&gt; <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> i == 6; };</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span></div>
<div class="line">main()</div>
<div class="line">{</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;vector: &quot;</span>;</div>
<div class="line"> </div>
<div class="line"> std::vector&lt;int&gt; v{6, 2, 6, 4, 6, 1};</div>
<div class="line"> {</div>
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">ranges::find</a>(v, 6); <span class="comment">// 1 2 3 4 5 6</span></div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;*i: &quot;</span> &lt;&lt; *i &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> }</div>
<div class="line"> {</div>
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">ranges::find</a>(v, 10); <span class="comment">// 1 2 3 4 5 6</span></div>
<div class="line"> <span class="keywordflow">if</span>(i == <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(v))</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;didn&#39;t find 10\n&quot;</span>;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> {</div>
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#gaf33139f1b442de0272477e126d6d66a7">ranges::find_if</a>(v, is_six);</div>
<div class="line"> <span class="keywordflow">if</span>(i != <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(v))</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;*i: &quot;</span> &lt;&lt; *i &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> {</div>
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_function" href="group__group-algorithms.html#ga1fdf9bbeab3ee7279c1656c1b40e4f81">ranges::find_if_not</a>(v, is_six);</div>
<div class="line"> <span class="keywordflow">if</span>(i != <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(v))</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;*i: &quot;</span> &lt;&lt; *i &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> {</div>
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">ranges::find</a>(v, 6);</div>
<div class="line"> i++;</div>
<div class="line"> <span class="keywordflow">if</span>(i != <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(v))</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;*i after ++ (2 expected): &quot;</span> &lt;&lt; *i;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;\narray: &quot;</span>;</div>
<div class="line"> </div>
<div class="line"> std::array&lt;int, 6&gt; a{6, 2, 3, 4, 5, 1};</div>
<div class="line"> {</div>
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">ranges::find</a>(a, 6);</div>
<div class="line"> <span class="keywordflow">if</span>(i != <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(a))</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;*i: &quot;</span> &lt;&lt; *i;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;\nlist: &quot;</span>;</div>
<div class="line"> </div>
<div class="line"> std::list&lt;int&gt; li{6, 2, 3, 4, 5, 1};</div>
<div class="line"> {</div>
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">ranges::find</a>(li, 6);</div>
<div class="line"> <span class="keywordflow">if</span>(i != <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(li))</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;*i: &quot;</span> &lt;&lt; *i;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;\nfwd_list: &quot;</span>;</div>
<div class="line"> </div>
<div class="line"> std::forward_list&lt;int&gt; fl{6, 2, 3, 4, 5, 1};</div>
<div class="line"> {</div>
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">ranges::find</a>(fl, 4);</div>
<div class="line"> <span class="keywordflow">if</span>(i != <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(fl))</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;*i: &quot;</span> &lt;&lt; *i;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;\ndeque: &quot;</span>;</div>
<div class="line"> </div>
<div class="line"> std::deque&lt;int&gt; d{6, 2, 3, 4, 5, 1};</div>
<div class="line"> {</div>
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">ranges::find</a>(d, 6);</div>
<div class="line"> <span class="keywordflow">if</span>(i != <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(d))</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;*i: &quot;</span> &lt;&lt; *i;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> cout &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line">}</div>
<div class="ttc" id="agroup__group-algorithms_html_ga1fdf9bbeab3ee7279c1656c1b40e4f81"><div class="ttname"><a href="group__group-algorithms.html#ga1fdf9bbeab3ee7279c1656c1b40e4f81">ranges::find_if_not</a></div><div class="ttdeci">constexpr I find_if_not(I first, S last, F pred, P proj=P{})</div><div class="ttdoc">template function find_if_not</div><div class="ttdef"><b>Definition:</b> find_if_not.hpp:49</div></div>
<div class="ttc" id="agroup__group-range_html_ga80d92c391f5b5c0a50156af5f9c9d8c7"><div class="ttname"><a href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a></div><div class="ttdeci">constexpr _end_::fn end</div><div class="ttdef"><b>Definition:</b> access.hpp:313</div></div>
<div class="ttc" id="agroup__query_html_ga4e7b439f707e529f3df7745ff7e2eb19"><div class="ttname"><a href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">meta::find</a></div><div class="ttdeci">drop&lt; L, min&lt; find_index&lt; L, T &gt;, size&lt; L &gt; &gt; &gt; find</div><div class="ttdoc">Return the tail of the list L starting at the first occurrence of T, if any such element exists; the ...</div><div class="ttdef"><b>Definition:</b> meta.hpp:2388</div></div>
<div class="ttc" id="agroup__query_html_gaf33139f1b442de0272477e126d6d66a7"><div class="ttname"><a href="group__query.html#gaf33139f1b442de0272477e126d6d66a7">meta::find_if</a></div><div class="ttdeci">_t&lt; detail::find_if_&lt; L, Fn &gt; &gt; find_if</div><div class="ttdoc">Return the tail of the list L starting at the first element A such that invoke&lt;Fn,...</div><div class="ttdef"><b>Definition:</b> meta.hpp:2506</div></div>
</div><!-- fragment --><h2><a class="anchor" id="example-for_each-seq"></a>
for_each on sequence containers</h2>
<div class="fragment"><div class="line"><span class="comment">// Use the for_each to print from various containers</span></div>
<div class="line"><span class="comment">// output</span></div>
<div class="line"><span class="comment">// vector: 1 2 3 4 5 6</span></div>
<div class="line"><span class="comment">// array: 1 2 3 4 5 6</span></div>
<div class="line"><span class="comment">// list: 1 2 3 4 5 6</span></div>
<div class="line"><span class="comment">// fwd_list: 1 2 3 4 5 6</span></div>
<div class="line"><span class="comment">// deque: 1 2 3 4 5 6</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;array&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;deque&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;forward_list&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;list&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;queue&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="algorithm_2for__each_8hpp.html">range/v3/algorithm/for_each.hpp</a>&gt;</span> <span class="comment">// specific includes</span></div>
<div class="line"><span class="preprocessor">#include &lt;stack&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><span class="keyword">using </span>std::cout;</div>
<div class="line"> </div>
<div class="line"><span class="keyword">auto</span> print = [](<span class="keywordtype">int</span> i) { cout &lt;&lt; i &lt;&lt; <span class="charliteral">&#39; &#39;</span>; };</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span></div>
<div class="line">main()</div>
<div class="line">{</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;vector: &quot;</span>;</div>
<div class="line"> std::vector&lt;int&gt; v{1, 2, 3, 4, 5, 6};</div>
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(v, print); <span class="comment">// 1 2 3 4 5 6</span></div>
<div class="line"> </div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;\narray: &quot;</span>;</div>
<div class="line"> std::array&lt;int, 6&gt; a{1, 2, 3, 4, 5, 6};</div>
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(a, print);</div>
<div class="line"> </div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;\nlist: &quot;</span>;</div>
<div class="line"> std::list&lt;int&gt; ll{1, 2, 3, 4, 5, 6};</div>
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(ll, print);</div>
<div class="line"> </div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;\nfwd_list: &quot;</span>;</div>
<div class="line"> std::forward_list&lt;int&gt; fl{1, 2, 3, 4, 5, 6};</div>
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(fl, print);</div>
<div class="line"> </div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;\ndeque: &quot;</span>;</div>
<div class="line"> std::deque&lt;int&gt; d{1, 2, 3, 4, 5, 6};</div>
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(d, print);</div>
<div class="line"> cout &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line">}</div>
</div><!-- fragment --><h2><a class="anchor" id="example-for_each-assoc"></a>
for_each on associative containers</h2>
<div class="fragment"><div class="line"><span class="comment">// for_each with associative containers</span></div>
<div class="line"><span class="comment">// output</span></div>
<div class="line"><span class="comment">// set: 1 2 3 4 5 6</span></div>
<div class="line"><span class="comment">// map: one:1 three:3 two:2</span></div>
<div class="line"><span class="comment">// unordered_map: three:3 one:1 two:2</span></div>
<div class="line"><span class="comment">// unordered_set: 6 5 4 3 2 1</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;map&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="algorithm_2for__each_8hpp.html">range/v3/algorithm/for_each.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;set&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;unordered_set&gt;</span></div>
<div class="line"><span class="keyword">using </span>std::cout;</div>
<div class="line"><span class="keyword">using </span>std::string;</div>
<div class="line"> </div>
<div class="line"><span class="keyword">auto</span> print = [](<span class="keywordtype">int</span> i) { cout &lt;&lt; i &lt;&lt; <span class="charliteral">&#39; &#39;</span>; };</div>
<div class="line"><span class="comment">// must take a pair for map types</span></div>
<div class="line"><span class="keyword">auto</span> printm = [](std::pair&lt;string, int&gt; p) {</div>
<div class="line"> cout &lt;&lt; p.first &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; p.second &lt;&lt; <span class="charliteral">&#39; &#39;</span>;</div>
<div class="line">};</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span></div>
<div class="line">main()</div>
<div class="line">{</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;set: &quot;</span>;</div>
<div class="line"> std::set&lt;int&gt; si{1, 2, 3, 4, 5, 6};</div>
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(si, print);</div>
<div class="line"> </div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;\nmap: &quot;</span>;</div>
<div class="line"> std::map&lt;string, int&gt; msi{{<span class="stringliteral">&quot;one&quot;</span>, 1}, {<span class="stringliteral">&quot;two&quot;</span>, 2}, {<span class="stringliteral">&quot;three&quot;</span>, 3}};</div>
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(msi, printm);</div>
<div class="line"> </div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;\nunordered map: &quot;</span>;</div>
<div class="line"> std::unordered_map&lt;string, int&gt; umsi{{<span class="stringliteral">&quot;one&quot;</span>, 1}, {<span class="stringliteral">&quot;two&quot;</span>, 2}, {<span class="stringliteral">&quot;three&quot;</span>, 3}};</div>
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(umsi, printm);</div>
<div class="line"> </div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;\nunordered set: &quot;</span>;</div>
<div class="line"> std::unordered_set&lt;int&gt; usi{1, 2, 3, 4, 5, 6};</div>
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(usi, print);</div>
<div class="line"> cout &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line">}</div>
</div><!-- fragment --><h2><a class="anchor" id="example-is_sorted"></a>
is_sorted</h2>
<div class="fragment"><div class="line"><span class="comment">// Check if a container is sorted</span></div>
<div class="line"><span class="comment">// output</span></div>
<div class="line"><span class="comment">// vector: true</span></div>
<div class="line"><span class="comment">// array: false</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;array&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="is__sorted_8hpp.html">range/v3/algorithm/is_sorted.hpp</a>&gt;</span> <span class="comment">// specific includes</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><span class="keyword">using </span>std::cout;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span></div>
<div class="line">main()</div>
<div class="line">{</div>
<div class="line"> cout &lt;&lt; std::boolalpha;</div>
<div class="line"> std::vector&lt;int&gt; v{1, 2, 3, 4, 5, 6};</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;vector: &quot;</span> &lt;&lt; <a class="code hl_function" href="group__group-algorithms.html#gae6ece7fef102a0c4f612716b574fa0e3">ranges::is_sorted</a>(v) &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> </div>
<div class="line"> std::array&lt;int, 6&gt; a{6, 2, 3, 4, 5, 6};</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;array: &quot;</span> &lt;&lt; <a class="code hl_function" href="group__group-algorithms.html#gae6ece7fef102a0c4f612716b574fa0e3">ranges::is_sorted</a>(a) &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line">}</div>
<div class="ttc" id="agroup__group-algorithms_html_gae6ece7fef102a0c4f612716b574fa0e3"><div class="ttname"><a href="group__group-algorithms.html#gae6ece7fef102a0c4f612716b574fa0e3">ranges::is_sorted</a></div><div class="ttdeci">constexpr bool is_sorted(I first, S last, R rel=R{}, P proj=P{})</div><div class="ttdoc">template function is_sorted</div><div class="ttdef"><b>Definition:</b> is_sorted.hpp:49</div></div>
<div class="ttc" id="ais__sorted_8hpp_html"><div class="ttname"><a href="is__sorted_8hpp.html">is_sorted.hpp</a></div></div>
</div><!-- fragment --><h1><a class="anchor" id="example-views"></a>
Examples: Views</h1>
<h2><a class="anchor" id="example-filter-transform"></a>
Filter and transform</h2>
<div class="fragment"><div class="line"><span class="comment">// This example demonstrates filtering and transforming a range on the</span></div>
<div class="line"><span class="comment">// fly with view adaptors.</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="filter_8hpp.html">range/v3/view/filter.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="view_2transform_8hpp.html">range/v3/view/transform.hpp</a>&gt;</span></div>
<div class="line"><span class="keyword">using </span>std::cout;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main()</div>
<div class="line">{</div>
<div class="line"> std::vector&lt;int&gt; <span class="keyword">const</span> vi{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};</div>
<div class="line"> <span class="keyword">using namespace </span>ranges;</div>
<div class="line"> <span class="keyword">auto</span> rng = vi | <a class="code hl_typedef" href="group__transformation.html#gac34d21074558f4ddc07a6206d5065619">views::filter</a>([](<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> i % 2 == 0; }) |</div>
<div class="line"> <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>([](<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> std::to_string(i); });</div>
<div class="line"> <span class="comment">// prints: [2,4,6,8,10]</span></div>
<div class="line"> cout &lt;&lt; rng &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line">}</div>
<div class="ttc" id="afilter_8hpp_html"><div class="ttname"><a href="filter_8hpp.html">filter.hpp</a></div></div>
<div class="ttc" id="agroup__transformation_html_ga32b72eeac93fde990739bfe3d1729207"><div class="ttname"><a href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">meta::transform</a></div><div class="ttdeci">_t&lt; detail::transform_&lt; Args... &gt; &gt; transform</div><div class="ttdoc">Return a new meta::list constructed by transforming all the elements in L with the unary invocable Fn...</div><div class="ttdef"><b>Definition:</b> meta.hpp:1852</div></div>
<div class="ttc" id="agroup__transformation_html_gac34d21074558f4ddc07a6206d5065619"><div class="ttname"><a href="group__transformation.html#gac34d21074558f4ddc07a6206d5065619">meta::filter</a></div><div class="ttdeci">join&lt; transform&lt; L, detail::filter_&lt; Pred &gt; &gt; &gt; filter</div><div class="ttdoc">Returns a new meta::list where only those elements of L that satisfy the Callable Pred such that invo...</div><div class="ttdef"><b>Definition:</b> meta.hpp:2818</div></div>
<div class="ttc" id="aview_2transform_8hpp_html"><div class="ttname"><a href="view_2transform_8hpp.html">transform.hpp</a></div></div>
</div><!-- fragment --><h2><a class="anchor" id="example-accumulate-ints"></a>
Generate ints and accumulate</h2>
<div class="fragment"><div class="line"><span class="comment">// Sums the first ten squares and prints them, using views::ints to generate</span></div>
<div class="line"><span class="comment">// and infinite range of integers, views::transform to square them, views::take</span></div>
<div class="line"><span class="comment">// to drop all but the first 10, and accumulate to sum them.</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="accumulate_8hpp.html">range/v3/numeric/accumulate.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="view_2iota_8hpp.html">range/v3/view/iota.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="view_2take_8hpp.html">range/v3/view/take.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="view_2transform_8hpp.html">range/v3/view/transform.hpp</a>&gt;</span></div>
<div class="line"><span class="keyword">using </span>std::cout;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main()</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">using namespace </span>ranges;</div>
<div class="line"> <span class="keywordtype">int</span> sum = <a class="code hl_typedef" href="group__transformation.html#gadec7869718bf0ddf69579775156b351d">accumulate</a>(views::ints(1, unreachable) | <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>([](<span class="keywordtype">int</span> i) {</div>
<div class="line"> <span class="keywordflow">return</span> i * i;</div>
<div class="line"> }) | views::take(10),</div>
<div class="line"> 0);</div>
<div class="line"> <span class="comment">// prints: 385</span></div>
<div class="line"> cout &lt;&lt; sum &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line">}</div>
<div class="ttc" id="aaccumulate_8hpp_html"><div class="ttname"><a href="accumulate_8hpp.html">accumulate.hpp</a></div></div>
<div class="ttc" id="agroup__transformation_html_gadec7869718bf0ddf69579775156b351d"><div class="ttname"><a href="group__transformation.html#gadec7869718bf0ddf69579775156b351d">meta::accumulate</a></div><div class="ttdeci">fold&lt; L, State, Fn &gt; accumulate</div><div class="ttdoc">An alias for meta::fold.</div><div class="ttdef"><b>Definition:</b> meta.hpp:1597</div></div>
<div class="ttc" id="aview_2iota_8hpp_html"><div class="ttname"><a href="view_2iota_8hpp.html">iota.hpp</a></div></div>
<div class="ttc" id="aview_2take_8hpp_html"><div class="ttname"><a href="view_2take_8hpp.html">take.hpp</a></div></div>
</div><!-- fragment --><h2><a class="anchor" id="example-comprehension-conversion"></a>
Convert a range comprehension to a vector</h2>
<div class="fragment"><div class="line"><span class="comment">// Use a range comprehension (views::for_each) to construct a custom range, and</span></div>
<div class="line"><span class="comment">// then convert it to a std::vector.</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="conversion_8hpp.html">range/v3/range/conversion.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="view_2for__each_8hpp.html">range/v3/view/for_each.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="view_2iota_8hpp.html">range/v3/view/iota.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="repeat__n_8hpp.html">range/v3/view/repeat_n.hpp</a>&gt;</span></div>
<div class="line"><span class="keyword">using </span>std::cout;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main()</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">using namespace </span>ranges;</div>
<div class="line"> <span class="keyword">auto</span> vi = <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">views::for_each</a>(views::ints(1, 6),</div>
<div class="line"> [](<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> yield_from(<a class="code hl_typedef" href="group__list.html#gab4b5da3947303335fc4139f163ed4748">views::repeat_n</a>(i, i)); }) |</div>
<div class="line"> to&lt;std::vector&gt;();</div>
<div class="line"> <span class="comment">// prints: [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5]</span></div>
<div class="line"> cout &lt;&lt; views::all(vi) &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line">}</div>
<div class="ttc" id="aconversion_8hpp_html"><div class="ttname"><a href="conversion_8hpp.html">conversion.hpp</a></div></div>
<div class="ttc" id="agroup__list_html_gab4b5da3947303335fc4139f163ed4748"><div class="ttname"><a href="group__list.html#gab4b5da3947303335fc4139f163ed4748">meta::repeat_n</a></div><div class="ttdeci">repeat_n_c&lt; N::type::value, T &gt; repeat_n</div><div class="ttdoc">Generate list&lt;T,T,T...T&gt; of size N arguments.</div><div class="ttdef"><b>Definition:</b> meta.hpp:1899</div></div>
<div class="ttc" id="arepeat__n_8hpp_html"><div class="ttname"><a href="repeat__n_8hpp.html">repeat_n.hpp</a></div></div>
<div class="ttc" id="aview_2for__each_8hpp_html"><div class="ttname"><a href="view_2for__each_8hpp.html">for_each.hpp</a></div></div>
</div><!-- fragment --><h1><a class="anchor" id="example-actions"></a>
Examples: Actions</h1>
<h2><a class="anchor" id="example-sort-unique"></a>
Remove non-unique elements from a container</h2>
<div class="fragment"><div class="line"><span class="comment">// Remove all non-unique elements from a container.</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="action_2sort_8hpp.html">range/v3/action/sort.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="action_2unique_8hpp.html">range/v3/action/unique.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="view_2all_8hpp.html">range/v3/view/all.hpp</a>&gt;</span></div>
<div class="line"><span class="keyword">using </span>std::cout;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main()</div>
<div class="line">{</div>
<div class="line"> std::vector&lt;int&gt; vi{9, 4, 5, 2, 9, 1, 0, 2, 6, 7, 4, 5, 6, 5, 9, 2, 7,</div>
<div class="line"> 1, 4, 5, 3, 8, 5, 0, 2, 9, 3, 7, 5, 7, 5, 5, 6, 1,</div>
<div class="line"> 4, 3, 1, 8, 4, 0, 7, 8, 8, 2, 6, 5, 3, 4, 5};</div>
<div class="line"> <span class="keyword">using namespace </span>ranges;</div>
<div class="line"> vi |= <a class="code hl_typedef" href="group__transformation.html#ga24714e0a1e7b99a57052a63d815955a7">actions::sort</a> | <a class="code hl_variable" href="action_2unique_8hpp.html#a2df52ed5e91e92ea7d2d7b1ed5408fcf">actions::unique</a>;</div>
<div class="line"> <span class="comment">// prints: [0,1,2,3,4,5,6,7,8,9]</span></div>
<div class="line"> cout &lt;&lt; views::all(vi) &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line">}</div>
<div class="ttc" id="aaction_2sort_8hpp_html"><div class="ttname"><a href="action_2sort_8hpp.html">sort.hpp</a></div></div>
<div class="ttc" id="aaction_2unique_8hpp_html"><div class="ttname"><a href="action_2unique_8hpp.html">unique.hpp</a></div></div>
<div class="ttc" id="aaction_2unique_8hpp_html_a2df52ed5e91e92ea7d2d7b1ed5408fcf"><div class="ttname"><a href="action_2unique_8hpp.html#a2df52ed5e91e92ea7d2d7b1ed5408fcf">unique</a></div><div class="ttdeci">constexpr action_closure&lt; unique_fn &gt; unique</div><div class="ttdef"><b>Definition:</b> unique.hpp:57</div></div>
<div class="ttc" id="agroup__transformation_html_ga24714e0a1e7b99a57052a63d815955a7"><div class="ttname"><a href="group__transformation.html#ga24714e0a1e7b99a57052a63d815955a7">meta::sort</a></div><div class="ttdeci">_t&lt; detail::sort_&lt; L, Fn &gt; &gt; sort</div><div class="ttdoc">Return a new meta::list that is sorted according to invocable predicate Fn.</div><div class="ttdef"><b>Definition:</b> meta.hpp:3277</div></div>
</div><!-- fragment --><h1><a class="anchor" id="example-gestalt"></a>
Examples: Putting it all together</h1>
<h2><a class="anchor" id="example-calendar"></a>
Calendar</h2>
<div class="fragment"><div class="line"> </div>
<div class="line"><span class="comment">// Usage:</span></div>
<div class="line"><span class="comment">// calendar 2015</span></div>
<div class="line"><span class="comment">//</span></div>
<div class="line"><span class="comment">// Output:</span></div>
<div class="line"><span class="comment">/*</span></div>
<div class="line"><span class="comment"> January February March</span></div>
<div class="line"><span class="comment"> 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7</span></div>
<div class="line"><span class="comment"> 4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14</span></div>
<div class="line"><span class="comment"> 11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21</span></div>
<div class="line"><span class="comment"> 18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28</span></div>
<div class="line"><span class="comment"> 25 26 27 28 29 30 31 29 30 31</span></div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment"> April May June</span></div>
<div class="line"><span class="comment"> 1 2 3 4 1 2 1 2 3 4 5 6</span></div>
<div class="line"><span class="comment"> 5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13</span></div>
<div class="line"><span class="comment"> 12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20</span></div>
<div class="line"><span class="comment"> 19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27</span></div>
<div class="line"><span class="comment"> 26 27 28 29 30 24 25 26 27 28 29 30 28 29 30</span></div>
<div class="line"><span class="comment"> 31</span></div>
<div class="line"><span class="comment"> July August September</span></div>
<div class="line"><span class="comment"> 1 2 3 4 1 1 2 3 4 5</span></div>
<div class="line"><span class="comment"> 5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12</span></div>
<div class="line"><span class="comment"> 12 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19</span></div>
<div class="line"><span class="comment"> 19 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26</span></div>
<div class="line"><span class="comment"> 26 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30</span></div>
<div class="line"><span class="comment"> 30 31</span></div>
<div class="line"><span class="comment"> October November December</span></div>
<div class="line"><span class="comment"> 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5</span></div>
<div class="line"><span class="comment"> 4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12</span></div>
<div class="line"><span class="comment"> 11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19</span></div>
<div class="line"><span class="comment"> 18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26</span></div>
<div class="line"><span class="comment"> 25 26 27 28 29 30 31 29 30 27 28 29 30 31</span></div>
<div class="line"><span class="comment">// */</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Credits:</span></div>
<div class="line"><span class="comment">// Thanks to H. S. Teoh for the article that served as the</span></div>
<div class="line"><span class="comment">// inspiration for this example:</span></div>
<div class="line"><span class="comment">// &lt;http://wiki.dlang.org/Component_programming_with_ranges&gt;</span></div>
<div class="line"><span class="comment">// Thanks to github&#39;s Arzar for bringing date::week_number</span></div>
<div class="line"><span class="comment">// to my attention.</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;boost/date_time/gregorian/gregorian.hpp&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;boost/format.hpp&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;boost/lexical_cast.hpp&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;boost/program_options.hpp&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;algorithm&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;cstddef&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="action_2join_8hpp.html">range/v3/action/join.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="algorithm_2copy_8hpp.html">range/v3/algorithm/copy.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="algorithm_2for__each_8hpp.html">range/v3/algorithm/for_each.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="mismatch_8hpp.html">range/v3/algorithm/mismatch.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="core_8hpp.html">range/v3/core.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="stream__iterators_8hpp.html">range/v3/iterator/stream_iterators.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="view_2all_8hpp.html">range/v3/view/all.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="chunk_8hpp.html">range/v3/view/chunk.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="chunk__by_8hpp.html">range/v3/view/chunk_by.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="concat_8hpp.html">range/v3/view/concat.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="view_2iota_8hpp.html">range/v3/view/iota.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="view_2join_8hpp.html">range/v3/view/join.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="repeat__n_8hpp.html">range/v3/view/repeat_n.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="single_8hpp.html">range/v3/view/single.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="view_2take_8hpp.html">range/v3/view/take.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="view_2transform_8hpp.html">range/v3/view/transform.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">namespace </span>po = boost::program_options;</div>
<div class="line"><span class="keyword">namespace </span>greg = boost::gregorian;</div>
<div class="line"><span class="keyword">using </span>date = greg::date;</div>
<div class="line"><span class="keyword">using </span>day = greg::date_duration;</div>
<div class="line"><span class="keyword">using namespace </span>ranges;</div>
<div class="line"> </div>
<div class="line"><span class="keyword">namespace </span>boost</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">namespace </span>gregorian</div>
<div class="line"> {</div>
<div class="line"> date &amp;operator++(date &amp;d)</div>
<div class="line"> {</div>
<div class="line"> <span class="keywordflow">return</span> d = d + day(1);</div>
<div class="line"> }</div>
<div class="line"> date operator++(date &amp;d, <span class="keywordtype">int</span>)</div>
<div class="line"> {</div>
<div class="line"> <span class="keywordflow">return</span> ++d - day(1);</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line">}</div>
<div class="line"><span class="keyword">namespace </span>ranges</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">template</span>&lt;&gt;</div>
<div class="line"> <span class="keyword">struct </span><a class="code hl_struct" href="structranges_1_1incrementable__traits.html">incrementable_traits</a>&lt;date&gt;</div>
<div class="line"> {</div>
<div class="line"> <span class="keyword">using </span>difference_type = date::duration_type::duration_rep::int_type;</div>
<div class="line"> };</div>
<div class="line">}</div>
<div class="line">CPP_assert(incrementable&lt;date&gt;);</div>
<div class="line"> </div>
<div class="line"><span class="keyword">auto</span></div>
<div class="line">dates(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> start, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> stop)</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">return</span> views::iota(date{start, greg::Jan, 1}, date{stop, greg::Jan, 1});</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="keyword">auto</span></div>
<div class="line">dates_from(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> year)</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">return</span> views::iota(date{year, greg::Jan, 1});</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="keyword">auto</span></div>
<div class="line">by_month()</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">return</span> views::chunk_by(</div>
<div class="line"> [](date a, date b) { <span class="keywordflow">return</span> a.month() == b.month(); });</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="keyword">auto</span></div>
<div class="line">by_week()</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">return</span> views::chunk_by([](date a, date b) {</div>
<div class="line"> <span class="comment">// ++a because week_number is Mon-Sun and we want Sun-Sat</span></div>
<div class="line"> <span class="keywordflow">return</span> (++a).week_number() == (++b).week_number();</div>
<div class="line"> });</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line">std::string</div>
<div class="line">format_day(date d)</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">return</span> boost::str(boost::format(<span class="stringliteral">&quot;%|3|&quot;</span>) % d.day());</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="comment">// In: range&lt;range&lt;date&gt;&gt;: month grouped by weeks.</span></div>
<div class="line"><span class="comment">// Out: range&lt;std::string&gt;: month with formatted weeks.</span></div>
<div class="line"><span class="keyword">auto</span></div>
<div class="line">format_weeks()</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">return</span> <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>([](<span class="comment">/*range&lt;date&gt;*/</span> <span class="keyword">auto</span> week) {</div>
<div class="line"> <span class="keywordflow">return</span> boost::str(boost::format(<span class="stringliteral">&quot;%1%%2%%|22t|&quot;</span>) %</div>
<div class="line"> std::string(<a class="code hl_typedef" href="group__list.html#gadd1d8e54275858523926ab20aa88ed0a">front</a>(week).day_of_week() * 3u, <span class="charliteral">&#39; &#39;</span>) %</div>
<div class="line"> (week | <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>(format_day) | <a class="code hl_typedef" href="group__transformation.html#gae8b919ad4c2cfe9b0fc7549cedae5e37">actions::join</a>));</div>
<div class="line"> });</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Return a formatted string with the title of the month</span></div>
<div class="line"><span class="comment">// corresponding to a date.</span></div>
<div class="line">std::string</div>
<div class="line">month_title(date d)</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">return</span> boost::str(boost::format(<span class="stringliteral">&quot;%|=22|&quot;</span>) % d.month().as_long_string());</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="comment">// In: range&lt;range&lt;date&gt;&gt;: year of months of days</span></div>
<div class="line"><span class="comment">// Out: range&lt;range&lt;std::string&gt;&gt;: year of months of formatted wks</span></div>
<div class="line"><span class="keyword">auto</span></div>
<div class="line">layout_months()</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">return</span> <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>([](<span class="comment">/*range&lt;date&gt;*/</span> <span class="keyword">auto</span> month) {</div>
<div class="line"> <span class="keyword">auto</span> week_count =</div>
<div class="line"> <span class="keyword">static_cast&lt;</span>std::ptrdiff_t<span class="keyword">&gt;</span>(<a class="code hl_variable" href="group__group-iterator.html#gaa5892e49da80688f61e93faf07c98746">distance</a>(month | by_week()));</div>
<div class="line"> <span class="keywordflow">return</span> views::concat(</div>
<div class="line"> views::single(month_title(<a class="code hl_typedef" href="group__list.html#gadd1d8e54275858523926ab20aa88ed0a">front</a>(month))),</div>
<div class="line"> month | by_week() | format_weeks(),</div>
<div class="line"> <a class="code hl_typedef" href="group__list.html#gab4b5da3947303335fc4139f163ed4748">views::repeat_n</a>(std::string(22, <span class="charliteral">&#39; &#39;</span>), 6 - week_count));</div>
<div class="line"> });</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Flattens a range of ranges by iterating the inner</span></div>
<div class="line"><span class="comment">// ranges in round-robin fashion.</span></div>
<div class="line"><span class="keyword">template</span>&lt;<span class="keyword">class</span> Rngs&gt;</div>
<div class="line"><span class="keyword">class </span>interleave_view : <span class="keyword">public</span> <a class="code hl_struct" href="structranges_1_1view__facade.html">view_facade</a>&lt;interleave_view&lt;Rngs&gt;&gt;</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">friend</span> range_access;</div>
<div class="line"> std::vector&lt;range_value_t&lt;Rngs&gt;&gt; rngs_;</div>
<div class="line"> <span class="keyword">struct </span>cursor;</div>
<div class="line"> cursor begin_cursor()</div>
<div class="line"> {</div>
<div class="line"> <span class="keywordflow">return</span> {0, &amp;rngs_, <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>(rngs_, <a class="code hl_variable" href="group__group-range.html#ga446b20253a26c93ef3004fcbfcbf3ec3">ranges::begin</a>) | to&lt;std::vector&gt;};</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"><span class="keyword">public</span>:</div>
<div class="line"> interleave_view() = <span class="keywordflow">default</span>;</div>
<div class="line"> <span class="keyword">explicit</span> interleave_view(Rngs rngs)</div>
<div class="line"> : rngs_(<a class="code hl_namespace" href="namespacestd.html">std</a>::<a class="code hl_variable" href="group__group-utility.html#ga20b5b25347e7f8173b2118fdb5ea5f58">move</a>(rngs) | <a class="code hl_function" href="group__group-range.html#ga698d78f9b587a09e6c4ac1ef683d2b18">to</a>&lt;<a class="code hl_namespace" href="namespacestd.html">std</a>::vector&gt;)</div>
<div class="line"> {}</div>
<div class="line">};</div>
<div class="line"> </div>
<div class="line"><span class="keyword">template</span>&lt;<span class="keyword">class</span> Rngs&gt;</div>
<div class="line"><span class="keyword">struct </span>interleave_view&lt;Rngs&gt;::cursor</div>
<div class="line">{</div>
<div class="line"> <a class="code hl_typedef" href="group__integral.html#ga92ba0e8ad97a32c34cec51aa6d4f8679">std::size_t</a> n_;</div>
<div class="line"> std::vector&lt;range_value_t&lt;Rngs&gt;&gt; *rngs_;</div>
<div class="line"> std::vector&lt;iterator_t&lt;range_value_t&lt;Rngs&gt;&gt;&gt; its_;</div>
<div class="line"> <span class="keyword">decltype</span>(<span class="keyword">auto</span>) read() <span class="keyword">const</span></div>
<div class="line"> {</div>
<div class="line"> <span class="keywordflow">return</span> *its_[n_];</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordtype">void</span> <a class="code hl_variable" href="group__group-iterator.html#gaf136ff254688f2c24f5c5f58df7ff56d">next</a>()</div>
<div class="line"> {</div>
<div class="line"> <span class="keywordflow">if</span>(0 == ((++n_) %= its_.size()))</div>
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">for_each</a>(its_, [](<span class="keyword">auto</span> &amp;it) { ++it; });</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordtype">bool</span> <a class="code hl_function" href="group__group-algorithms.html#gad02116ac1a7f39cc324dd959e9c1d1de">equal</a>(<a class="code hl_struct" href="structranges_1_1default__sentinel__t.html">default_sentinel_t</a>)<span class="keyword"> const</span></div>
<div class="line"><span class="keyword"> </span>{</div>
<div class="line"> <span class="keywordflow">if</span>(n_ != 0)</div>
<div class="line"> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"> <span class="keyword">auto</span> ends = *rngs_ | <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>(<a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>);</div>
<div class="line"> <span class="keywordflow">return</span> its_.end() != <a class="code hl_function" href="group__group-algorithms.html#gabf62a140e62356a8d885adc36d5fd2ed">std::mismatch</a>(</div>
<div class="line"> its_.begin(), its_.end(), ends.begin(), std::not_equal_to&lt;&gt;{}).first;</div>
<div class="line"> }</div>
<div class="line"> CPP_member</div>
<div class="line"> <span class="keyword">auto</span> <a class="code hl_function" href="group__group-algorithms.html#gad02116ac1a7f39cc324dd959e9c1d1de">equal</a>(cursor <span class="keyword">const</span>&amp; that) <span class="keyword">const</span> -&gt; CPP_ret(<span class="keywordtype">bool</span>)(</div>
<div class="line"> <span class="keyword">requires</span> forward_range&lt;range_value_t&lt;Rngs&gt;&gt;)</div>
<div class="line"> {</div>
<div class="line"> <span class="keywordflow">return</span> n_ == that.n_ &amp;&amp; its_ == that.its_;</div>
<div class="line"> }</div>
<div class="line">};</div>
<div class="line"> </div>
<div class="line"><span class="comment">// In: range&lt;range&lt;T&gt;&gt;</span></div>
<div class="line"><span class="comment">// Out: range&lt;T&gt;, flattened by walking the ranges</span></div>
<div class="line"><span class="comment">// round-robin fashion.</span></div>
<div class="line"><span class="keyword">auto</span></div>
<div class="line">interleave()</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">return</span> <a class="code hl_variable" href="group__group-views.html#ga214da59baf075118417256e2f9ce5d9b">make_view_closure</a>([](<span class="keyword">auto</span> &amp;&amp;rngs) {</div>
<div class="line"> <span class="keyword">using </span>Rngs = <span class="keyword">decltype</span>(rngs);</div>
<div class="line"> <span class="keywordflow">return</span> interleave_view&lt;views::all_t&lt;Rngs&gt;&gt;(</div>
<div class="line"> views::all(std::forward&lt;Rngs&gt;(rngs)));</div>
<div class="line"> });</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="comment">// In: range&lt;range&lt;T&gt;&gt;</span></div>
<div class="line"><span class="comment">// Out: range&lt;range&lt;T&gt;&gt;, transposing the rows and columns.</span></div>
<div class="line"><span class="keyword">auto</span></div>
<div class="line"><a class="code hl_typedef" href="group__transformation.html#ga386fa55fefb4aa3f4df3227379916839">transpose</a>()</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">return</span> <a class="code hl_variable" href="group__group-views.html#ga214da59baf075118417256e2f9ce5d9b">make_view_closure</a>([](<span class="keyword">auto</span> &amp;&amp;rngs) {</div>
<div class="line"> <span class="keyword">using </span>Rngs = <span class="keyword">decltype</span>(rngs);</div>
<div class="line"> CPP_assert(forward_range&lt;Rngs&gt;);</div>
<div class="line"> <span class="keywordflow">return</span> std::forward&lt;Rngs&gt;(rngs)</div>
<div class="line"> | interleave()</div>
<div class="line"> | views::chunk(<span class="keyword">static_cast&lt;</span><a class="code hl_typedef" href="group__integral.html#ga92ba0e8ad97a32c34cec51aa6d4f8679">std::size_t</a><span class="keyword">&gt;</span>(<a class="code hl_variable" href="group__group-iterator.html#gaa5892e49da80688f61e93faf07c98746">distance</a>(rngs)));</div>
<div class="line"> });</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="comment">// In: range&lt;range&lt;range&lt;string&gt;&gt;&gt;</span></div>
<div class="line"><span class="comment">// Out: range&lt;range&lt;range&lt;string&gt;&gt;&gt;, transposing months.</span></div>
<div class="line"><span class="keyword">auto</span></div>
<div class="line">transpose_months()</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">return</span> <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>(</div>
<div class="line"> [](<span class="comment">/*range&lt;range&lt;string&gt;&gt;*/</span> <span class="keyword">auto</span> rng) { <span class="keywordflow">return</span> rng | <a class="code hl_typedef" href="group__transformation.html#ga386fa55fefb4aa3f4df3227379916839">transpose</a>(); });</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="comment">// In: range&lt;range&lt;string&gt;&gt;</span></div>
<div class="line"><span class="comment">// Out: range&lt;string&gt;, joining the strings of the inner ranges</span></div>
<div class="line"><span class="keyword">auto</span></div>
<div class="line">join_months()</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">return</span> <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>(</div>
<div class="line"> [](<span class="comment">/*range&lt;string&gt;*/</span> <span class="keyword">auto</span> rng) { <span class="keywordflow">return</span> <a class="code hl_typedef" href="group__transformation.html#gae8b919ad4c2cfe9b0fc7549cedae5e37">actions::join</a>(rng); });</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="comment">// In: range&lt;date&gt;</span></div>
<div class="line"><span class="comment">// Out: range&lt;string&gt;, lines of formatted output</span></div>
<div class="line"><span class="keyword">auto</span></div>
<div class="line">format_calendar(<a class="code hl_typedef" href="group__integral.html#ga92ba0e8ad97a32c34cec51aa6d4f8679">std::size_t</a> months_per_line)</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">return</span></div>
<div class="line"> <span class="comment">// Group the dates by month:</span></div>
<div class="line"> by_month()</div>
<div class="line"> <span class="comment">// Format the month into a range of strings:</span></div>
<div class="line"> | layout_months()</div>
<div class="line"> <span class="comment">// Group the months that belong side-by-side:</span></div>
<div class="line"> | views::chunk(months_per_line)</div>
<div class="line"> <span class="comment">// Transpose the rows and columns of the size-by-side months:</span></div>
<div class="line"> | transpose_months()</div>
<div class="line"> <span class="comment">// Ungroup the side-by-side months:</span></div>
<div class="line"> | <a class="code hl_typedef" href="group__transformation.html#gae8b919ad4c2cfe9b0fc7549cedae5e37">views::join</a></div>
<div class="line"> <span class="comment">// Join the strings of the transposed months:</span></div>
<div class="line"> | join_months();</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span></div>
<div class="line">main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[]) <span class="keyword">try</span></div>
<div class="line">{</div>
<div class="line"> <span class="comment">// Declare the supported options.</span></div>
<div class="line"> po::options_description desc(<span class="stringliteral">&quot;Allowed options&quot;</span>);</div>
<div class="line"> desc.add_options()(<span class="stringliteral">&quot;help&quot;</span>, <span class="stringliteral">&quot;produce help message&quot;</span>)(</div>
<div class="line"> <span class="stringliteral">&quot;start&quot;</span>, po::value&lt;unsigned short&gt;(), <span class="stringliteral">&quot;Year to start&quot;</span>)(</div>
<div class="line"> <span class="stringliteral">&quot;stop&quot;</span>, po::value&lt;std::string&gt;(), <span class="stringliteral">&quot;Year to stop&quot;</span>)(</div>
<div class="line"> <span class="stringliteral">&quot;per-line&quot;</span>,</div>
<div class="line"> po::value&lt;std::size_t&gt;()-&gt;default_value(3u),</div>
<div class="line"> <span class="stringliteral">&quot;Nbr of months per line&quot;</span>);</div>
<div class="line"> </div>
<div class="line"> po::positional_options_description p;</div>
<div class="line"> p.add(<span class="stringliteral">&quot;start&quot;</span>, 1).add(<span class="stringliteral">&quot;stop&quot;</span>, 1);</div>
<div class="line"> </div>
<div class="line"> po::variables_map vm;</div>
<div class="line"> po::store(</div>
<div class="line"> po::command_line_parser(argc, argv).options(desc).positional(p).run(),</div>
<div class="line"> vm);</div>
<div class="line"> po::notify(vm);</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">if</span>(vm.count(<span class="stringliteral">&quot;help&quot;</span>) || 1 != vm.count(<span class="stringliteral">&quot;start&quot;</span>))</div>
<div class="line"> {</div>
<div class="line"> std::cerr &lt;&lt; desc &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> <span class="keywordflow">return</span> 1;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">auto</span> <span class="keyword">const</span> start = vm[<span class="stringliteral">&quot;start&quot;</span>].as&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>&gt;();</div>
<div class="line"> <span class="keyword">auto</span> <span class="keyword">const</span> stop = 0 == vm.count(<span class="stringliteral">&quot;stop&quot;</span>)</div>
<div class="line"> ? (<span class="keywordtype">unsigned</span> short)(start + 1)</div>
<div class="line"> : vm[<span class="stringliteral">&quot;stop&quot;</span>].as&lt;std::string&gt;() == <span class="stringliteral">&quot;never&quot;</span></div>
<div class="line"> ? (<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)-1</div>
<div class="line"> : boost::lexical_cast&lt;unsigned short&gt;(</div>
<div class="line"> vm[<span class="stringliteral">&quot;stop&quot;</span>].as&lt;std::string&gt;());</div>
<div class="line"> <span class="keyword">auto</span> <span class="keyword">const</span> months_per_line = vm[<span class="stringliteral">&quot;per-line&quot;</span>].as&lt;<a class="code hl_typedef" href="group__integral.html#ga92ba0e8ad97a32c34cec51aa6d4f8679">std::size_t</a>&gt;();</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">if</span>(stop != (<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)-1 &amp;&amp; stop &lt;= start)</div>
<div class="line"> {</div>
<div class="line"> std::cerr &lt;&lt; <span class="stringliteral">&quot;ERROR: The stop year must be larger than the start&quot;</span></div>
<div class="line"> &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> <span class="keywordflow">return</span> 1;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">if</span>((<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)-1 != stop)</div>
<div class="line"> {</div>
<div class="line"> <a class="code hl_variable" href="group__group-utility.html#gaa77a9f8d78fe2ed9c14bde30e7523746">copy</a>(dates(start, stop) | format_calendar(months_per_line),</div>
<div class="line"> <a class="code hl_struct" href="structranges_1_1ostream__iterator.html">ostream_iterator&lt;&gt;</a>(std::cout, <span class="stringliteral">&quot;\n&quot;</span>));</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <a class="code hl_variable" href="group__group-utility.html#gaa77a9f8d78fe2ed9c14bde30e7523746">copy</a>(dates_from(start) | format_calendar(months_per_line),</div>
<div class="line"> <a class="code hl_struct" href="structranges_1_1ostream__iterator.html">ostream_iterator&lt;&gt;</a>(std::cout, <span class="stringliteral">&quot;\n&quot;</span>));</div>
<div class="line"> }</div>
<div class="line">}</div>
<div class="line"><span class="keywordflow">catch</span>(std::exception &amp;e)</div>
<div class="line">{</div>
<div class="line"> std::cerr &lt;&lt; <span class="stringliteral">&quot;ERROR: Unhandled exception\n&quot;</span>;</div>
<div class="line"> std::cerr &lt;&lt; <span class="stringliteral">&quot; what(): &quot;</span> &lt;&lt; e.what();</div>
<div class="line"> <span class="keywordflow">return</span> 1;</div>
<div class="line">}</div>
<div class="ttc" id="aaction_2join_8hpp_html"><div class="ttname"><a href="action_2join_8hpp.html">join.hpp</a></div></div>
<div class="ttc" id="aalgorithm_2copy_8hpp_html"><div class="ttname"><a href="algorithm_2copy_8hpp.html">copy.hpp</a></div></div>
<div class="ttc" id="achunk_8hpp_html"><div class="ttname"><a href="chunk_8hpp.html">chunk.hpp</a></div></div>
<div class="ttc" id="achunk__by_8hpp_html"><div class="ttname"><a href="chunk__by_8hpp.html">chunk_by.hpp</a></div></div>
<div class="ttc" id="aconcat_8hpp_html"><div class="ttname"><a href="concat_8hpp.html">concat.hpp</a></div></div>
<div class="ttc" id="acore_8hpp_html"><div class="ttname"><a href="core_8hpp.html">core.hpp</a></div></div>
<div class="ttc" id="agroup__group-algorithms_html_gabf62a140e62356a8d885adc36d5fd2ed"><div class="ttname"><a href="group__group-algorithms.html#gabf62a140e62356a8d885adc36d5fd2ed">ranges::mismatch</a></div><div class="ttdeci">mismatch_result&lt; I1, I2 &gt; mismatch(I1 begin1, S1 end1, I2 begin2, C pred=C{}, P1 proj1=P1{}, P2 proj2=P2{})</div><div class="ttdoc">function template mismatch</div><div class="ttdef"><b>Definition:</b> mismatch.hpp:56</div></div>
<div class="ttc" id="agroup__group-algorithms_html_gad02116ac1a7f39cc324dd959e9c1d1de"><div class="ttname"><a href="group__group-algorithms.html#gad02116ac1a7f39cc324dd959e9c1d1de">ranges::equal</a></div><div class="ttdeci">constexpr bool equal(I0 begin0, S0 end0, I1 begin1, C pred=C{}, P0 proj0=P0{}, P1 proj1=P1{})</div><div class="ttdoc">function template equal</div><div class="ttdef"><b>Definition:</b> equal.hpp:66</div></div>
<div class="ttc" id="agroup__group-iterator_html_gaa5892e49da80688f61e93faf07c98746"><div class="ttname"><a href="group__group-iterator.html#gaa5892e49da80688f61e93faf07c98746">ranges::distance</a></div><div class="ttdeci">constexpr distance_fn distance</div><div class="ttdef"><b>Definition:</b> operations.hpp:561</div></div>
<div class="ttc" id="agroup__group-iterator_html_gaf136ff254688f2c24f5c5f58df7ff56d"><div class="ttname"><a href="group__group-iterator.html#gaf136ff254688f2c24f5c5f58df7ff56d">ranges::next</a></div><div class="ttdeci">constexpr next_fn next</div><div class="ttdef"><b>Definition:</b> operations.hpp:316</div></div>
<div class="ttc" id="agroup__group-range_html_ga446b20253a26c93ef3004fcbfcbf3ec3"><div class="ttname"><a href="group__group-range.html#ga446b20253a26c93ef3004fcbfcbf3ec3">ranges::begin</a></div><div class="ttdeci">constexpr _begin_::fn begin</div><div class="ttdef"><b>Definition:</b> access.hpp:182</div></div>
<div class="ttc" id="agroup__group-range_html_ga698d78f9b587a09e6c4ac1ef683d2b18"><div class="ttname"><a href="group__group-range.html#ga698d78f9b587a09e6c4ac1ef683d2b18">ranges::to</a></div><div class="ttdeci">auto to() -&gt; detail::to_container_fn&lt; detail::from_range&lt; ContT &gt; &gt;</div><div class="ttdoc">For initializing a container of the specified type with the elements of an Range.</div><div class="ttdef"><b>Definition:</b> conversion.hpp:410</div></div>
<div class="ttc" id="agroup__group-utility_html_ga20b5b25347e7f8173b2118fdb5ea5f58"><div class="ttname"><a href="group__group-utility.html#ga20b5b25347e7f8173b2118fdb5ea5f58">ranges::aux::move</a></div><div class="ttdeci">constexpr move_fn move</div><div class="ttdef"><b>Definition:</b> move.hpp:52</div></div>
<div class="ttc" id="agroup__group-utility_html_gaa77a9f8d78fe2ed9c14bde30e7523746"><div class="ttname"><a href="group__group-utility.html#gaa77a9f8d78fe2ed9c14bde30e7523746">ranges::aux::copy</a></div><div class="ttdeci">constexpr copy_fn copy</div><div class="ttdef"><b>Definition:</b> copy.hpp:50</div></div>
<div class="ttc" id="agroup__group-views_html_ga214da59baf075118417256e2f9ce5d9b"><div class="ttname"><a href="group__group-views.html#ga214da59baf075118417256e2f9ce5d9b">ranges::make_view_closure</a></div><div class="ttdeci">constexpr make_view_closure_fn make_view_closure</div><div class="ttdef"><b>Definition:</b> view.hpp:101</div></div>
<div class="ttc" id="agroup__integral_html_ga92ba0e8ad97a32c34cec51aa6d4f8679"><div class="ttname"><a href="group__integral.html#ga92ba0e8ad97a32c34cec51aa6d4f8679">meta::size_t</a></div><div class="ttdeci">std::integral_constant&lt; std::size_t, N &gt; size_t</div><div class="ttdoc">An integral constant wrapper for std::size_t.</div><div class="ttdef"><b>Definition:</b> meta.hpp:163</div></div>
<div class="ttc" id="agroup__list_html_gadd1d8e54275858523926ab20aa88ed0a"><div class="ttname"><a href="group__list.html#gadd1d8e54275858523926ab20aa88ed0a">meta::front</a></div><div class="ttdeci">_t&lt; detail::front_&lt; L &gt; &gt; front</div><div class="ttdoc">Return the first element in meta::list L.</div><div class="ttdef"><b>Definition:</b> meta.hpp:2070</div></div>
<div class="ttc" id="agroup__transformation_html_ga386fa55fefb4aa3f4df3227379916839"><div class="ttname"><a href="group__transformation.html#ga386fa55fefb4aa3f4df3227379916839">meta::transpose</a></div><div class="ttdeci">fold&lt; ListOfLists, repeat_n&lt; size&lt; front&lt; ListOfLists &gt; &gt;, list&lt;&gt; &gt;, bind_back&lt; quote&lt; transform &gt;, quote&lt; push_back &gt; &gt; &gt; transpose</div><div class="ttdoc">Given a list of lists of types ListOfLists, transpose the elements from the lists.</div><div class="ttdef"><b>Definition:</b> meta.hpp:2892</div></div>
<div class="ttc" id="agroup__transformation_html_gae8b919ad4c2cfe9b0fc7549cedae5e37"><div class="ttname"><a href="group__transformation.html#gae8b919ad4c2cfe9b0fc7549cedae5e37">meta::join</a></div><div class="ttdeci">apply&lt; quote&lt; concat &gt;, ListOfLists &gt; join</div><div class="ttdoc">Joins a list of lists into a single list.</div><div class="ttdef"><b>Definition:</b> meta.hpp:1786</div></div>
<div class="ttc" id="amismatch_8hpp_html"><div class="ttname"><a href="mismatch_8hpp.html">mismatch.hpp</a></div></div>
<div class="ttc" id="anamespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div><div class="ttdoc">STL namespace.</div></div>
<div class="ttc" id="asingle_8hpp_html"><div class="ttname"><a href="single_8hpp.html">single.hpp</a></div></div>
<div class="ttc" id="astream__iterators_8hpp_html"><div class="ttname"><a href="stream__iterators_8hpp.html">stream_iterators.hpp</a></div></div>
<div class="ttc" id="astructranges_1_1default__sentinel__t_html"><div class="ttname"><a href="structranges_1_1default__sentinel__t.html">ranges::default_sentinel_t</a></div><div class="ttdef"><b>Definition:</b> default_sentinel.hpp:26</div></div>
<div class="ttc" id="astructranges_1_1incrementable__traits_html"><div class="ttname"><a href="structranges_1_1incrementable__traits.html">ranges::incrementable_traits</a></div><div class="ttdef"><b>Definition:</b> associated_types.hpp:166</div></div>
<div class="ttc" id="astructranges_1_1ostream__iterator_html"><div class="ttname"><a href="structranges_1_1ostream__iterator.html">ranges::ostream_iterator</a></div><div class="ttdef"><b>Definition:</b> stream_iterators.hpp:37</div></div>
<div class="ttc" id="astructranges_1_1view__facade_html"><div class="ttname"><a href="structranges_1_1view__facade.html">ranges::view_facade</a></div><div class="ttdoc">A utility for constructing a view from a (derived) type that implements begin and end cursors.</div><div class="ttdef"><b>Definition:</b> facade.hpp:66</div></div>
<div class="ttc" id="aview_2join_8hpp_html"><div class="ttname"><a href="view_2join_8hpp.html">join.hpp</a></div></div>
</div><!-- fragment --> </div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>