3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Other Algorithms</title>
5 <link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7 <link rel="home" href="../index.html" title="The Boost Algorithm Library">
8 <link rel="up" href="../index.html" title="The Boost Algorithm Library">
9 <link rel="prev" href="CXX17.html" title="C++17 Algorithms">
10 <link rel="next" href="not_yet_documented_cxx17_algos.html" title="Not-yet-documented C++17 Algorithms">
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../more/index.htm">More</a></td>
22 <div class="spirit-nav">
23 <a accesskey="p" href="CXX17.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="not_yet_documented_cxx17_algos.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
26 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
27 <a name="algorithm.Misc"></a><a class="link" href="Misc.html" title="Other Algorithms">Other Algorithms</a>
28 </h2></div></div></div>
29 <div class="toc"><dl class="toc">
30 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms"></a></span></dt>
32 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.none_of_equal">none_of_equal
34 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.one_of_equal">one_of_equal
36 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.is_decreasing">is_decreasing
38 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.is_increasing">is_increasing
40 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.is_strictly_decreasing">is_strictly_decreasing
42 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.is_strictly_increasing">is_strictly_increasing
44 <dt><span class="section"><a href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.clamp">clamp</a></span></dt>
45 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.clamp_range">clamp_range
47 <dt><span class="section"><a href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not">find_not
49 <dt><span class="section"><a href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward">find_backward
51 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.find_not_backward">find_not_backward
53 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.find_if_backward">find_if_backward
55 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.find_if_not">find_if_not
57 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.find_if_not_backward">find_if_not_backward
59 <dt><span class="section"><a href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.gather">gather</a></span></dt>
60 <dt><span class="section"><a href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.hex">hex</a></span></dt>
61 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.unhex">unhex
63 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.hex_lower">hex_lower
65 <dt><span class="section"><a href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome">is_palindrome</a></span></dt>
66 <dt><span class="section"><a href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until">is_partitioned_until
68 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.apply_reverse_permutation">apply_reverse_permutation
70 <dt><span class="section"><a href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation">apply_permutation</a></span></dt>
71 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.copy_until">copy_until
73 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.copy_while">copy_while
75 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.iota_n">iota_n
77 <dt><span class="section"><a href="Misc.html#algorithm.Misc.misc_inner_algorithms.power">power
82 <div class="titlepage"></div>
84 <div class="titlepage"><div><div><h4 class="title">
85 <a name="algorithm.Misc.misc_inner_algorithms.none_of_equal"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.none_of_equal" title="none_of_equal">none_of_equal
87 </h4></div></div></div>
89 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/cxx11/none_of_hpp.html" title="Header <boost/algorithm/cxx11/none_of.hpp>">none_of_equal</a>
90 </code> </strong></span> Whether none of a range's elements matches a value
94 <div class="titlepage"><div><div><h4 class="title">
95 <a name="algorithm.Misc.misc_inner_algorithms.one_of_equal"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.one_of_equal" title="one_of_equal">one_of_equal
97 </h4></div></div></div>
99 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/cxx11/one_of_hpp.html" title="Header <boost/algorithm/cxx11/one_of.hpp>">one_of_equal</a>
100 </code> </strong></span> Whether only one of a range's elements matches a
104 <div class="section">
105 <div class="titlepage"><div><div><h4 class="title">
106 <a name="algorithm.Misc.misc_inner_algorithms.is_decreasing"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.is_decreasing" title="is_decreasing">is_decreasing
108 </h4></div></div></div>
110 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/cxx11/is_sorted_hpp.html" title="Header <boost/algorithm/cxx11/is_sorted.hpp>">is_decreasing</a>
111 </code> </strong></span> Whether an entire sequence is decreasing; i.e, each
112 item is less than or equal to the previous one
115 <div class="section">
116 <div class="titlepage"><div><div><h4 class="title">
117 <a name="algorithm.Misc.misc_inner_algorithms.is_increasing"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.is_increasing" title="is_increasing">is_increasing
119 </h4></div></div></div>
121 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/cxx11/is_sorted_hpp.html" title="Header <boost/algorithm/cxx11/is_sorted.hpp>">is_increasing</a>
122 </code> </strong></span> Whether an entire sequence is increasing; i.e, each
123 item is greater than or equal to the previous one
126 <div class="section">
127 <div class="titlepage"><div><div><h4 class="title">
128 <a name="algorithm.Misc.misc_inner_algorithms.is_strictly_decreasing"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.is_strictly_decreasing" title="is_strictly_decreasing">is_strictly_decreasing
130 </h4></div></div></div>
132 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/cxx11/is_sorted_hpp.html" title="Header <boost/algorithm/cxx11/is_sorted.hpp>">is_strictly_decreasing</a>
133 </code> </strong></span> Whether an entire sequence is strictly decreasing;
134 i.e, each item is less than the previous one
137 <div class="section">
138 <div class="titlepage"><div><div><h4 class="title">
139 <a name="algorithm.Misc.misc_inner_algorithms.is_strictly_increasing"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.is_strictly_increasing" title="is_strictly_increasing">is_strictly_increasing
141 </h4></div></div></div>
143 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/cxx11/is_sorted_hpp.html" title="Header <boost/algorithm/cxx11/is_sorted.hpp>">is_strictly_increasing</a>
144 </code> </strong></span> Whether an entire sequence is strictly increasing;
145 i.e, each item is greater than the previous one
148 <div class="section">
149 <div class="titlepage"><div><div><h4 class="title">
150 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.clamp"></a><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.clamp" title="clamp">clamp</a>
151 </h4></div></div></div>
153 The header file clamp.hpp contains two functions for "clamping"
154 a value between a pair of boundary values.
157 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.clamp.h0"></a>
158 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.clamp.clamp"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.clamp.clamp">clamp</a>
161 The function <code class="computeroutput"><span class="identifier">clamp</span> <span class="special">(</span><span class="identifier">v</span><span class="special">,</span> <span class="identifier">lo</span><span class="special">,</span> <span class="identifier">hi</span><span class="special">)</span></code> returns:
163 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
164 <li class="listitem">
167 <li class="listitem">
170 <li class="listitem">
175 Note: using <code class="computeroutput"><span class="identifier">clamp</span></code> with
176 floating point numbers may give unexpected results if one of the values
177 is <code class="computeroutput"><span class="identifier">NaN</span></code>.
180 There is also a version that allows the caller to specify a comparison
181 predicate to use instead of <code class="computeroutput"><span class="keyword">operator</span>
182 <span class="special"><</span></code>.
186 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
187 <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">clamp</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">lo</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">hi</span> <span class="special">);</span>
189 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Pred</span><span class="special">></span>
190 <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">clamp</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">lo</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">hi</span><span class="special">,</span> <span class="identifier">Pred</span> <span class="identifier">p</span> <span class="special">);</span>
197 <pre class="programlisting"><span class="keyword">int</span> <span class="identifier">foo</span> <span class="special">=</span> <span class="number">23</span><span class="special">;</span>
198 <span class="identifier">foo</span> <span class="special">=</span> <span class="identifier">clamp</span> <span class="special">(</span> <span class="identifier">foo</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">10</span> <span class="special">);</span>
201 will leave <code class="computeroutput"><span class="identifier">foo</span></code> with a value
205 Complexity: <code class="computeroutput"><span class="identifier">clamp</span></code> will
206 make either one or two calls to the comparison predicate before returning
207 one of the three parameters.
210 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.clamp.h1"></a>
211 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.clamp.clamp_range"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.clamp.clamp_range">clamp_range</a>
214 There are also four range-based versions of clamp, that apply clamping
215 to a series of values. You could write them yourself with std::transform
216 and bind, like this: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">transform</span>
217 <span class="special">(</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">bind</span> <span class="special">(</span> <span class="identifier">clamp</span> <span class="special">(</span> <span class="identifier">_1</span><span class="special">,</span> <span class="identifier">lo</span><span class="special">,</span> <span class="identifier">hi</span> <span class="special">)))</span></code>, but they are provided here for your
222 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span>
223 <span class="identifier">OutputIterator</span> <span class="identifier">clamp_range</span> <span class="special">(</span> <span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span>
224 <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">InputIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="identifier">lo</span><span class="special">,</span>
225 <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">InputIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="identifier">hi</span> <span class="special">);</span>
227 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span>
228 <span class="identifier">OutputIterator</span> <span class="identifier">clamp_range</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">Range</span> <span class="special">&</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span>
229 <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">Range</span><span class="special">>::</span><span class="identifier">type</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="identifier">lo</span><span class="special">,</span>
230 <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">Range</span><span class="special">>::</span><span class="identifier">type</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="identifier">hi</span> <span class="special">);</span>
232 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Pred</span><span class="special">></span>
233 <span class="identifier">OutputIterator</span> <span class="identifier">clamp_range</span> <span class="special">(</span> <span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span>
234 <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">InputIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="identifier">lo</span><span class="special">,</span>
235 <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">InputIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="identifier">hi</span><span class="special">,</span> <span class="identifier">Pred</span> <span class="identifier">p</span> <span class="special">);</span>
237 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Pred</span><span class="special">></span>
238 <span class="identifier">OutputIterator</span> <span class="identifier">clamp_range</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">Range</span> <span class="special">&</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span>
239 <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">Range</span><span class="special">>::</span><span class="identifier">type</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="identifier">lo</span><span class="special">,</span>
240 <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">Range</span><span class="special">>::</span><span class="identifier">type</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="identifier">hi</span><span class="special">,</span>
241 <span class="identifier">Pred</span> <span class="identifier">p</span> <span class="special">);</span>
246 <div class="section">
247 <div class="titlepage"><div><div><h4 class="title">
248 <a name="algorithm.Misc.misc_inner_algorithms.clamp_range"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.clamp_range" title="clamp_range">clamp_range
250 </h4></div></div></div>
252 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/clamp_hpp.html" title="Header <boost/algorithm/clamp.hpp>">clamp_range</a>
253 </code> </strong></span> Perform <code class="literal">clamp</code> on the elements
254 of a range and write the results into an output iterator
257 <div class="section">
258 <div class="titlepage"><div><div><h4 class="title">
259 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not"></a><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not" title="find_not">find_not
261 </h4></div></div></div>
263 The header file 'find_not.hpp' contains a variants of a the stl algorithm
264 <code class="computeroutput"><span class="identifier">find</span></code>. The algorithm finds
265 the first value in the given sequence that is not equal to the given value.
268 Consider this use of <code class="computeroutput"><span class="identifier">find</span><span class="special">()</span></code>:
270 <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">vec</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">2</span> <span class="special">};</span>
271 <span class="keyword">auto</span> <span class="identifier">it</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">find</span><span class="special">(</span><span class="identifier">vec</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">vec</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="number">1</span><span class="special">);</span>
274 This gives us the first occurance of <code class="computeroutput"><span class="number">1</span></code>
275 in <code class="computeroutput"><span class="identifier">vec</span></code>. What if we want
276 to find the first occurrance of any number besides <code class="computeroutput"><span class="number">1</span></code>
277 in <code class="computeroutput"><span class="identifier">vec</span></code>? We have to write
278 an unfortunate amount of code:
280 <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">vec</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">2</span> <span class="special">};</span>
281 <span class="keyword">auto</span> <span class="identifier">it</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">find_if</span><span class="special">(</span><span class="identifier">vec</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">vec</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="special">[](</span><span class="keyword">int</span> <span class="identifier">i</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">i</span> <span class="special">!=</span> <span class="number">1</span><span class="special">;</span> <span class="special">});</span>
284 With <code class="computeroutput"><span class="identifier">find_not</span><span class="special">()</span></code>
285 the code gets much more terse:
287 <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">vec</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">2</span> <span class="special">};</span>
288 <span class="keyword">auto</span> <span class="identifier">it</span> <span class="special">=</span> <span class="identifier">find_not</span><span class="special">(</span><span class="identifier">vec</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">vec</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="number">1</span><span class="special">);</span>
291 The existing <code class="computeroutput"><span class="identifier">find</span></code> variants
292 are: <code class="computeroutput"><span class="identifier">find</span><span class="special">()</span></code>,
293 <code class="computeroutput"><span class="identifier">find_if</span><span class="special">()</span></code>,
294 and <code class="computeroutput"><span class="identifier">find_if_not</span><span class="special">()</span></code>.
295 It seems natural to also have <code class="computeroutput"><span class="identifier">find_not</span><span class="special">()</span></code>, for the very reason that we have <code class="computeroutput"><span class="identifier">find_if_not</span><span class="special">()</span></code>
296 -- to avoid having to write a lambda to wrap the negation of the find condition.
299 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.h0"></a>
300 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.interface"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.interface">interface</a>
302 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">InputIter</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Sentinel</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
303 <span class="identifier">InputIter</span> <span class="identifier">find_not</span><span class="special">(</span><span class="identifier">InputIter</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">Sentinel</span> <span class="identifier">last</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="special">&</span> <span class="identifier">x</span><span class="special">);</span>
305 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
306 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special"><</span><span class="identifier">Range</span><span class="special">></span> <span class="identifier">find_not</span><span class="special">(</span><span class="identifier">Range</span> <span class="special">&</span> <span class="identifier">r</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="special">&</span> <span class="identifier">x</span><span class="special">);</span>
309 These overloads of <code class="computeroutput"><span class="identifier">find_not</span></code>
310 return the first value that is not equal to <code class="computeroutput"><span class="identifier">x</span></code>
311 in the sequence <code class="computeroutput"><span class="special">[</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">)</span></code> or <code class="computeroutput"><span class="identifier">r</span></code>,
315 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.h1"></a>
316 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.examples"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.examples">Examples</a>
319 Given the container <code class="computeroutput"><span class="identifier">c1</span></code>
320 containing <code class="computeroutput"><span class="special">{</span> <span class="number">0</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span>
321 <span class="number">2</span> <span class="special">}</span></code>,
324 <pre class="programlisting"><span class="identifier">find_not</span> <span class="special">(</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="number">1</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span>
325 <span class="identifier">find_not</span> <span class="special">(</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="number">0</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">next</span><span class="special">(</span><span class="identifier">c1</span><span class="special">.</span><span class="identifier">begin</span><span class="special">())</span>
328 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.h2"></a>
329 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.iterator_requirements"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.iterator_requirements">Iterator
333 <code class="computeroutput"><span class="identifier">find_not</span></code> works on all iterators
334 except output iterators.
337 The template parameter <code class="computeroutput"><span class="identifier">Sentinel</span></code>
338 is allowed to be different from <code class="computeroutput"><span class="identifier">InputIter</span></code>,
339 or they may be the same. For an <code class="computeroutput"><span class="identifier">InputIter</span></code>
340 <code class="computeroutput"><span class="identifier">it</span></code> and a <code class="computeroutput"><span class="identifier">Sentinel</span></code> <code class="computeroutput"><span class="identifier">end</span></code>,
341 <code class="computeroutput"><span class="identifier">it</span> <span class="special">==</span>
342 <span class="identifier">end</span></code> and <code class="computeroutput"><span class="identifier">it</span>
343 <span class="special">!=</span> <span class="identifier">end</span></code>
344 must be well-formed expressions.
347 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.h3"></a>
348 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.complexity"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.complexity">Complexity</a>
354 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.h4"></a>
355 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.exception_safety"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.exception_safety">Exception
359 <code class="computeroutput"><span class="identifier">find_not</span></code> takes its parameters
360 by value and do not depend upon any global state. Therefore, it provides
361 the strong exception guarantee.
364 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.h5"></a>
365 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.notes"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not.notes">Notes</a>
368 <code class="computeroutput"><span class="keyword">constexpr</span></code> in C++14 or later.
371 <div class="section">
372 <div class="titlepage"><div><div><h4 class="title">
373 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward"></a><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward" title="find_backward">find_backward
375 </h4></div></div></div>
377 The header file 'find_backward.hpp' contains variants of the stl algorithm
378 <code class="computeroutput"><span class="identifier">find</span></code>. These variants are
379 like <code class="computeroutput"><span class="identifier">find</span></code>, except that
380 the evaluate the elements of the given sequence in reverse order.
383 Consider how finding the last element that is equal to <code class="computeroutput"><span class="identifier">x</span></code>
384 in a range is typically done:
386 <pre class="programlisting"><span class="comment">// Assume a valid range if elements delimited by [first, last).</span>
387 <span class="keyword">while</span> <span class="special">(</span><span class="identifier">last</span><span class="special">--</span> <span class="special">!=</span> <span class="identifier">first</span><span class="special">)</span> <span class="special">{</span>
388 <span class="keyword">if</span> <span class="special">(*</span><span class="identifier">last</span> <span class="special">==</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">{</span>
389 <span class="comment">// Use last here...</span>
390 <span class="special">}</span>
391 <span class="special">}</span>
394 Raw loops are icky though. Perhaps we should do a bit of extra work to
395 allow the use of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">find</span><span class="special">()</span></code>:
397 <pre class="programlisting"><span class="keyword">auto</span> <span class="identifier">rfirst</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">make_reverse_iterator</span><span class="special">(</span><span class="identifier">last</span><span class="special">);</span>
398 <span class="keyword">auto</span> <span class="identifier">rlast</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">make_reverse_iterator</span><span class="special">(</span><span class="identifier">first</span><span class="special">);</span>
399 <span class="keyword">auto</span> <span class="identifier">it</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">find</span><span class="special">(</span><span class="identifier">rfirst</span><span class="special">,</span> <span class="identifier">rlast</span><span class="special">,</span> <span class="identifier">x</span><span class="special">);</span>
400 <span class="comment">// Use it here...</span>
403 That seems nicer in that there is no raw loop, but it has two major drawbacks.
404 First, it requires an unpleasant amount of typing. Second, it is less efficient
405 than forward-iterator <code class="computeroutput"><span class="identifier">find</span></code>
406 , since <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">reverse_iterator</span></code> calls its base-iterator's
407 <code class="computeroutput"><span class="keyword">operator</span><span class="special">--()</span></code>
408 in most of its member functions before doing the work that the member function
412 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.h0"></a>
413 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.interface"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.interface">interface</a>
415 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">BidiIter</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
416 <span class="identifier">BidiIter</span> <span class="identifier">find_backward</span><span class="special">(</span><span class="identifier">BidiIter</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">BidiIter</span> <span class="identifier">last</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="special">&</span> <span class="identifier">x</span><span class="special">);</span>
418 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
419 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special"><</span><span class="identifier">Range</span><span class="special">></span> <span class="identifier">find_backward</span><span class="special">(</span><span class="identifier">Range</span> <span class="special">&</span> <span class="identifier">range</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="special">&</span> <span class="identifier">x</span><span class="special">);</span>
422 These overloads of <code class="computeroutput"><span class="identifier">find_backward</span></code>
423 return an iterator to the last element that is equal to <code class="computeroutput"><span class="identifier">x</span></code>
424 in <code class="computeroutput"><span class="special">[</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">)</span></code> or <code class="computeroutput"><span class="identifier">r</span></code>,
427 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">BidiIter</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
428 <span class="identifier">BidiIter</span> <span class="identifier">find_not_backward</span><span class="special">(</span><span class="identifier">BidiIter</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">BidiIter</span> <span class="identifier">last</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="special">&</span> <span class="identifier">x</span><span class="special">);</span>
430 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
431 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special"><</span><span class="identifier">Range</span><span class="special">></span> <span class="identifier">find_not_backward</span><span class="special">(</span><span class="identifier">Range</span> <span class="special">&</span> <span class="identifier">range</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="special">&</span> <span class="identifier">x</span><span class="special">);</span>
434 These overloads of <code class="computeroutput"><span class="identifier">find_not_backward</span></code>
435 return an iterator to the last element that is not equal to <code class="computeroutput"><span class="identifier">x</span></code> in <code class="computeroutput"><span class="special">[</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">)</span></code>
436 or <code class="computeroutput"><span class="identifier">r</span></code>, respectively.
438 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">BidiIter</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Pred</span><span class="special">></span>
439 <span class="identifier">BidiIter</span> <span class="identifier">find_if_backward</span><span class="special">(</span><span class="identifier">BidiIter</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">BidiIter</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">Pred</span> <span class="identifier">p</span><span class="special">);</span>
441 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Pred</span><span class="special">></span>
442 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special"><</span><span class="identifier">Range</span><span class="special">></span> <span class="identifier">find_if_backward</span><span class="special">(</span><span class="identifier">Range</span> <span class="special">&</span> <span class="identifier">range</span><span class="special">,</span> <span class="identifier">Pred</span> <span class="identifier">p</span><span class="special">);</span>
445 These overloads of <code class="computeroutput"><span class="identifier">find_if_backward</span></code>
446 return an iterator to the last element for which <code class="computeroutput"><span class="identifier">pred</span></code>
447 returns <code class="computeroutput"><span class="keyword">true</span></code> in <code class="computeroutput"><span class="special">[</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">)</span></code> or <code class="computeroutput"><span class="identifier">r</span></code>,
450 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">BidiIter</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Pred</span><span class="special">></span>
451 <span class="identifier">BidiIter</span> <span class="identifier">find_if_not_backward</span><span class="special">(</span><span class="identifier">BidiIter</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">BidiIter</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">Pred</span> <span class="identifier">p</span><span class="special">);</span>
453 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Pred</span><span class="special">></span>
454 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special"><</span><span class="identifier">Range</span><span class="special">></span> <span class="identifier">find_if_not_backward</span><span class="special">(</span><span class="identifier">Range</span> <span class="special">&</span> <span class="identifier">range</span><span class="special">,</span> <span class="identifier">Pred</span> <span class="identifier">p</span><span class="special">);</span>
457 These overloads of <code class="computeroutput"><span class="identifier">find_if_not_backward</span></code>
458 return an iterator to the last element for which <code class="computeroutput"><span class="identifier">pred</span></code>
459 returns <code class="computeroutput"><span class="keyword">false</span></code> in <code class="computeroutput"><span class="special">[</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">)</span></code> or <code class="computeroutput"><span class="identifier">r</span></code>,
463 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.h1"></a>
464 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.examples"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.examples">Examples</a>
467 Given the container <code class="computeroutput"><span class="identifier">c1</span></code>
468 containing <code class="computeroutput"><span class="special">{</span> <span class="number">2</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span>
469 <span class="number">2</span> <span class="special">}</span></code>,
472 <pre class="programlisting"><span class="identifier">find_backward</span> <span class="special">(</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="number">2</span> <span class="special">)</span> <span class="special">--></span> <span class="special">--</span><span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span>
473 <span class="identifier">find_backward</span> <span class="special">(</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="number">3</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span>
474 <span class="identifier">find_if_backward</span> <span class="special">(</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="special">[](</span><span class="keyword">int</span> <span class="identifier">i</span><span class="special">)</span> <span class="special">{</span><span class="keyword">return</span> <span class="identifier">i</span> <span class="special">==</span> <span class="number">2</span><span class="special">;}</span> <span class="special">)</span> <span class="special">--></span> <span class="special">--</span><span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span>
475 <span class="identifier">find_if_backward</span> <span class="special">(</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="special">[](</span><span class="keyword">int</span> <span class="identifier">i</span><span class="special">)</span> <span class="special">{</span><span class="keyword">return</span> <span class="identifier">i</span> <span class="special">==</span> <span class="number">3</span><span class="special">;}</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span>
476 <span class="identifier">find_not_backward</span> <span class="special">(</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="number">2</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">prev</span><span class="special">(</span><span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="number">2</span><span class="special">)</span>
477 <span class="identifier">find_not_backward</span> <span class="special">(</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="number">1</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span>
478 <span class="identifier">find_if_not_backward</span> <span class="special">(</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="special">[](</span><span class="keyword">int</span> <span class="identifier">i</span><span class="special">)</span> <span class="special">{</span><span class="keyword">return</span> <span class="identifier">i</span> <span class="special">==</span> <span class="number">2</span><span class="special">;}</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">prev</span><span class="special">(</span><span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="number">2</span><span class="special">)</span>
479 <span class="identifier">find_if_not_backward</span> <span class="special">(</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="special">[](</span><span class="keyword">int</span> <span class="identifier">i</span><span class="special">)</span> <span class="special">{</span><span class="keyword">return</span> <span class="identifier">i</span> <span class="special">==</span> <span class="number">1</span><span class="special">;}</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">c1</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span>
482 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.h2"></a>
483 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.iterator_requirements"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.iterator_requirements">Iterator
487 All variants work on bidirectional iterators.
490 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.h3"></a>
491 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.complexity"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.complexity">Complexity</a>
497 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.h4"></a>
498 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.exception_safety"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.exception_safety">Exception
502 All of the variants take their parameters by value and do not depend upon
503 any global state. Therefore, all the routines in this file provide the
504 strong exception guarantee.
507 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.h5"></a>
508 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.notes"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward.notes">Notes</a>
511 All variants are <code class="computeroutput"><span class="keyword">constexpr</span></code>
515 <div class="section">
516 <div class="titlepage"><div><div><h4 class="title">
517 <a name="algorithm.Misc.misc_inner_algorithms.find_not_backward"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.find_not_backward" title="find_not_backward">find_not_backward
519 </h4></div></div></div>
521 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/find_backward_hpp.html" title="Header <boost/algorithm/find_backward.hpp>">find_not_backward</a>
522 </code> </strong></span> Find the last element in a sequence that does not
523 equal a value. See <a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward" title="find_backward">find_backward</a>.
526 <div class="section">
527 <div class="titlepage"><div><div><h4 class="title">
528 <a name="algorithm.Misc.misc_inner_algorithms.find_if_backward"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.find_if_backward" title="find_if_backward">find_if_backward
530 </h4></div></div></div>
532 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/find_backward_hpp.html" title="Header <boost/algorithm/find_backward.hpp>">find_if_backward</a>
533 </code> </strong></span> Find the last element in a sequence that satisfies
534 a predicate. See <a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward" title="find_backward">find_backward</a>.
537 <div class="section">
538 <div class="titlepage"><div><div><h4 class="title">
539 <a name="algorithm.Misc.misc_inner_algorithms.find_if_not"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.find_if_not" title="find_if_not">find_if_not
541 </h4></div></div></div>
543 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/cxx11/find_if_not_hpp.html" title="Header <boost/algorithm/cxx11/find_if_not.hpp>">find_if_not</a>
544 </code> </strong></span> Find the first element in a sequence that does not
545 satisfy a predicate. See <a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_not" title="find_not">find_not</a>.
548 <div class="section">
549 <div class="titlepage"><div><div><h4 class="title">
550 <a name="algorithm.Misc.misc_inner_algorithms.find_if_not_backward"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.find_if_not_backward" title="find_if_not_backward">find_if_not_backward
552 </h4></div></div></div>
554 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/find_backward_hpp.html" title="Header <boost/algorithm/find_backward.hpp>">find_if_not_backward</a>
555 </code> </strong></span> Find the last element in a sequence that does not
556 satisfy a predicate. See <a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.find_backward" title="find_backward">find_backward</a>.
559 <div class="section">
560 <div class="titlepage"><div><div><h4 class="title">
561 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather"></a><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.gather" title="gather">gather</a>
562 </h4></div></div></div>
564 The header file 'boost/algorithm/gather.hpp' contains two variants of a
565 single algorithm, <code class="computeroutput"><span class="identifier">gather</span></code>.
568 <code class="computeroutput"><span class="identifier">gather</span><span class="special">()</span></code>
569 takes a collection of elements defined by a pair of iterators and moves
570 the ones satisfying a predicate to them to a position (called the pivot)
571 within the sequence. The algorithm is stable. The result is a pair of iterators
572 that contains the items that satisfy the predicate.
575 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.h0"></a>
576 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.interface"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.interface">Interface</a>
579 The function <code class="computeroutput"><span class="identifier">gather</span></code> returns
580 a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span></code> of iterators that denote the elements
581 that satisfy the predicate.
584 There are two versions; one takes two iterators, and the other takes a
589 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">algorithm</span> <span class="special">{</span>
591 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Pred</span><span class="special">></span>
592 <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span><span class="identifier">BidirectionalIterator</span><span class="special">></span>
593 <span class="identifier">gather</span> <span class="special">(</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">pivot</span><span class="special">,</span> <span class="identifier">Pred</span> <span class="identifier">pred</span> <span class="special">);</span>
595 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">BidirectionalRange</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Pred</span><span class="special">></span>
596 <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">BidirectionalRange</span><span class="special">>::</span><span class="identifier">type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">BidirectionalRange</span><span class="special">>::</span><span class="identifier">type</span><span class="special">></span>
597 <span class="identifier">gather</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">BidirectionalRange</span> <span class="special">&</span><span class="identifier">range</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">BidirectionalRange</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">pivot</span><span class="special">,</span> <span class="identifier">Pred</span> <span class="identifier">pred</span> <span class="special">);</span>
599 <span class="special">}}</span>
604 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.h1"></a>
605 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.examples"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.examples">Examples</a>
608 Given an sequence containing:
610 <pre class="programlisting"><span class="number">0</span> <span class="number">1</span> <span class="number">2</span> <span class="number">3</span> <span class="number">4</span> <span class="number">5</span> <span class="number">6</span> <span class="number">7</span> <span class="number">8</span> <span class="number">9</span>
615 a call to gather ( arr, arr + 10, arr + 4, IsEven ) will result in:
619 <pre class="programlisting"><span class="number">1</span> <span class="number">3</span> <span class="number">0</span> <span class="number">2</span> <span class="number">4</span> <span class="number">6</span> <span class="number">8</span> <span class="number">5</span> <span class="number">7</span> <span class="number">9</span>
620 <span class="special">|---|-----|</span>
621 <span class="identifier">first</span> <span class="special">|</span> <span class="identifier">second</span>
622 <span class="identifier">pivot</span>
625 where <code class="computeroutput"><span class="identifier">first</span></code> and <code class="computeroutput"><span class="identifier">second</span></code> are the fields of the pair that
626 is returned by the call.
629 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.h2"></a>
630 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.iterator_requirements"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.iterator_requirements">Iterator
634 <code class="computeroutput"><span class="identifier">gather</span></code> work on bidirectional
635 iterators or better. This requirement comes from the usage of <code class="computeroutput"><span class="identifier">stable_partition</span></code>, which requires bidirectional
636 iterators. Some standard libraries (libstdc++ and libc++, for example)
637 have implementations of <code class="computeroutput"><span class="identifier">stable_partition</span></code>
638 that work with forward iterators. If that is the case, then <code class="computeroutput"><span class="identifier">gather</span></code> will work with forward iterators
642 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.h3"></a>
643 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.storage_requirements"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.storage_requirements">Storage
647 <code class="computeroutput"><span class="identifier">gather</span></code> uses <code class="computeroutput"><span class="identifier">stable_partition</span></code>, which will attempt
648 to allocate temporary memory, but will work in-situ if there is none available.
651 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.h4"></a>
652 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.complexity"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.complexity">Complexity</a>
655 If there is sufficient memory available, the run time is linear: <code class="computeroutput"><span class="identifier">O</span><span class="special">(</span><span class="identifier">N</span><span class="special">)</span></code>
658 If there is not any memory available, then the run time is <code class="computeroutput"><span class="identifier">O</span><span class="special">(</span><span class="identifier">N</span>
659 <span class="identifier">log</span> <span class="identifier">N</span><span class="special">)</span></code>.
662 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.h5"></a>
663 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.exception_safety"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.exception_safety">Exception
667 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.h6"></a>
668 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.notes"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.gather.notes">Notes</a>
671 <div class="section">
672 <div class="titlepage"><div><div><h4 class="title">
673 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex"></a><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.hex" title="hex">hex</a>
674 </h4></div></div></div>
676 The header file <code class="computeroutput"><span class="char">'boost/algorithm/hex.hpp'</span></code>
677 contains three variants each of two algorithms, <code class="computeroutput"><span class="identifier">hex</span></code>
678 and <code class="computeroutput"><span class="identifier">unhex</span></code>. They are inverse
679 algorithms; that is, one undoes the effort of the other. <code class="computeroutput"><span class="identifier">hex</span></code> takes a sequence of values, and turns
680 them into hexadecimal characters. <code class="computeroutput"><span class="identifier">unhex</span></code>
681 takes a sequence of hexadecimal characters, and outputs a sequence of values.
684 <code class="computeroutput"><span class="identifier">hex</span></code> and <code class="computeroutput"><span class="identifier">unhex</span></code>
685 come from MySQL, where they are used in database queries and stored procedures.
688 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.h0"></a>
689 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.interface"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.interface">interface</a>
692 The function <code class="computeroutput"><span class="identifier">hex</span></code> takes
693 a sequence of values and writes hexadecimal characters. There are three
694 different interfaces, differing only in how the input sequence is specified.
697 The first one takes an iterator pair. The second one takes a pointer to
698 the start of a zero-terminated sequence, such as a c string, and the third
699 takes a range as defined by the Boost.Range library.
703 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span>
704 <span class="identifier">OutputIterator</span> <span class="identifier">hex</span> <span class="special">(</span> <span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">OutputIterator</span> <span class="identifier">out</span> <span class="special">);</span>
706 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span>
707 <span class="identifier">OutputIterator</span> <span class="identifier">hex</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="special">*</span><span class="identifier">ptr</span><span class="special">,</span> <span class="identifier">OutputIterator</span> <span class="identifier">out</span> <span class="special">);</span>
709 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span>
710 <span class="identifier">OutputIterator</span> <span class="identifier">hex</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">Range</span> <span class="special">&</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">OutputIterator</span> <span class="identifier">out</span> <span class="special">);</span>
715 <code class="computeroutput"><span class="identifier">hex</span></code> writes only values
716 in the range '0'..'9' and 'A'..'F', but is not limited to character output.
717 The output iterator could refer to a wstring, or a vector of integers,
718 or any other integral type.
721 The function <code class="computeroutput"><span class="identifier">unhex</span></code> takes
722 the output of <code class="computeroutput"><span class="identifier">hex</span></code> and turns
723 it back into a sequence of values.
726 The input parameters for the different variations of <code class="computeroutput"><span class="identifier">unhex</span></code>
727 are the same as <code class="computeroutput"><span class="identifier">hex</span></code>.
731 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span>
732 <span class="identifier">OutputIterator</span> <span class="identifier">unhex</span> <span class="special">(</span> <span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">OutputIterator</span> <span class="identifier">out</span> <span class="special">);</span>
734 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span>
735 <span class="identifier">OutputIterator</span> <span class="identifier">unhex</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="special">*</span><span class="identifier">ptr</span><span class="special">,</span> <span class="identifier">OutputIterator</span> <span class="identifier">out</span> <span class="special">);</span>
737 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span>
738 <span class="identifier">OutputIterator</span> <span class="identifier">unhex</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">Range</span> <span class="special">&</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">OutputIterator</span> <span class="identifier">out</span> <span class="special">);</span>
743 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.h1"></a>
744 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.error_handling"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.error_handling">Error
748 The header 'hex.hpp' defines three exception classes:
750 <pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">hex_decode_error</span><span class="special">:</span> <span class="keyword">virtual</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">exception</span><span class="special">,</span> <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exception</span> <span class="special">{};</span>
751 <span class="keyword">struct</span> <span class="identifier">not_enough_input</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">hex_decode_error</span><span class="special">;</span>
752 <span class="keyword">struct</span> <span class="identifier">non_hex_input</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">hex_decode_error</span><span class="special">;</span>
757 If the input to <code class="computeroutput"><span class="identifier">unhex</span></code> does
758 not contain an "even number" of hex digits, then an exception
759 of type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">algorithm</span><span class="special">::</span><span class="identifier">not_enough_input</span></code> is thrown.
762 If the input to <code class="computeroutput"><span class="identifier">unhex</span></code> contains
763 any non-hexadecimal characters, then an exception of type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">algorithm</span><span class="special">::</span><span class="identifier">non_hex_input</span></code> is thrown.
766 If you want to catch all the decoding errors, you can catch exceptions
767 of type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">algorithm</span><span class="special">::</span><span class="identifier">hex_decode_error</span></code>.
770 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.h2"></a>
771 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.examples"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.examples">Examples</a>
774 Assuming that <code class="computeroutput"><span class="identifier">out</span></code> is an
775 iterator that accepts <code class="computeroutput"><span class="keyword">char</span></code>
776 values, and <code class="computeroutput"><span class="identifier">wout</span></code> accepts
777 <code class="computeroutput"><span class="keyword">wchar_t</span></code> values (and that sizeof
782 <pre class="programlisting"><span class="identifier">hex</span> <span class="special">(</span> <span class="string">"abcdef"</span><span class="special">,</span> <span class="identifier">out</span> <span class="special">)</span> <span class="special">--></span> <span class="string">"616263646566"</span>
783 <span class="identifier">hex</span> <span class="special">(</span> <span class="string">"32"</span><span class="special">,</span> <span class="identifier">out</span> <span class="special">)</span> <span class="special">--></span> <span class="string">"3332"</span>
784 <span class="identifier">hex</span> <span class="special">(</span> <span class="string">"abcdef"</span><span class="special">,</span> <span class="identifier">wout</span> <span class="special">)</span> <span class="special">--></span> <span class="string">"006100620063006400650066"</span>
785 <span class="identifier">hex</span> <span class="special">(</span> <span class="string">"32"</span><span class="special">,</span> <span class="identifier">wout</span> <span class="special">)</span> <span class="special">--></span> <span class="string">"00330032"</span>
787 <span class="identifier">unhex</span> <span class="special">(</span> <span class="string">"616263646566"</span><span class="special">,</span> <span class="identifier">out</span> <span class="special">)</span> <span class="special">--></span> <span class="string">"abcdef"</span>
788 <span class="identifier">unhex</span> <span class="special">(</span> <span class="string">"3332"</span><span class="special">,</span> <span class="identifier">out</span> <span class="special">)</span> <span class="special">--></span> <span class="string">"32"</span>
789 <span class="identifier">unhex</span> <span class="special">(</span> <span class="string">"616263646566"</span><span class="special">,</span> <span class="identifier">wout</span> <span class="special">)</span> <span class="special">--></span> <span class="string">"\6162\6364\6566"</span> <span class="special">(</span> <span class="identifier">i</span><span class="special">.</span><span class="identifier">e</span><span class="special">,</span> <span class="identifier">a</span> <span class="number">3</span> <span class="identifier">character</span> <span class="identifier">string</span> <span class="special">)</span>
790 <span class="identifier">unhex</span> <span class="special">(</span> <span class="string">"3332"</span><span class="special">,</span> <span class="identifier">wout</span> <span class="special">)</span> <span class="special">--></span> <span class="string">"\3233"</span> <span class="special">(</span> <span class="identifier">U</span><span class="special">+</span><span class="number">3332</span><span class="special">,</span> <span class="identifier">SQUARE</span> <span class="identifier">HUARADDO</span> <span class="special">)</span>
792 <span class="identifier">unhex</span> <span class="special">(</span> <span class="string">"3"</span><span class="special">,</span> <span class="identifier">out</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">Error</span> <span class="special">-</span> <span class="keyword">not</span> <span class="identifier">enough</span> <span class="identifier">input</span>
793 <span class="identifier">unhex</span> <span class="special">(</span> <span class="string">"32"</span><span class="special">,</span> <span class="identifier">wout</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">Error</span> <span class="special">-</span> <span class="keyword">not</span> <span class="identifier">enough</span> <span class="identifier">input</span>
795 <span class="identifier">unhex</span> <span class="special">(</span> <span class="string">"ACEG"</span><span class="special">,</span> <span class="identifier">out</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">Error</span> <span class="special">-</span> <span class="identifier">non</span><span class="special">-</span><span class="identifier">hex</span> <span class="identifier">input</span>
800 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.h3"></a>
801 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.iterator_requirements"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.iterator_requirements">Iterator
805 <code class="computeroutput"><span class="identifier">hex</span></code> and <code class="computeroutput"><span class="identifier">unhex</span></code>
806 work on all iterator types.
809 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.h4"></a>
810 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.complexity"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.complexity">Complexity</a>
813 All of the variants of <code class="computeroutput"><span class="identifier">hex</span></code>
814 and <code class="computeroutput"><span class="identifier">unhex</span></code> run in <span class="emphasis"><em>O(N)</em></span>
815 (linear) time; that is, that is, they process each element in the input
819 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.h5"></a>
820 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.exception_safety"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.exception_safety">Exception
824 All of the variants of <code class="computeroutput"><span class="identifier">hex</span></code>
825 and <code class="computeroutput"><span class="identifier">unhex</span></code> take their parameters
826 by value or const reference, and do not depend upon any global state. Therefore,
827 all the routines in this file provide the strong exception guarantee. However,
828 when working on input iterators, if an exception is thrown, the input iterators
829 will not be reset to their original values (i.e, the characters read from
830 the iterator cannot be un-read)
833 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.h6"></a>
834 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.notes"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.hex.notes">Notes</a>
836 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
837 <code class="computeroutput"><span class="identifier">hex</span></code> and <code class="computeroutput"><span class="identifier">unhex</span></code> both do nothing when passed
841 <div class="section">
842 <div class="titlepage"><div><div><h4 class="title">
843 <a name="algorithm.Misc.misc_inner_algorithms.unhex"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.unhex" title="unhex">unhex
845 </h4></div></div></div>
847 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/hex_hpp.html" title="Header <boost/algorithm/hex.hpp>">unhex</a>
848 </code> </strong></span> Convert a sequence of hexadecimal characters into
849 a sequence of integers or characters
852 <div class="section">
853 <div class="titlepage"><div><div><h4 class="title">
854 <a name="algorithm.Misc.misc_inner_algorithms.hex_lower"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.hex_lower" title="hex_lower">hex_lower
856 </h4></div></div></div>
858 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/hex_hpp.html" title="Header <boost/algorithm/hex.hpp>">hex_lower</a>
859 </code> </strong></span> Convert a sequence of integral types into a lower
860 case hexadecimal sequence of characters
863 <div class="section">
864 <div class="titlepage"><div><div><h4 class="title">
865 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome"></a><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome" title="is_palindrome">is_palindrome</a>
866 </h4></div></div></div>
868 The header file 'is_palindrome.hpp' contains six variants of a single algorithm,
869 is_palindrome. The algorithm tests the sequence and returns true if the
870 sequence is a palindrome; i.e, it is identical when traversed either backwards
874 The routine <code class="computeroutput"><span class="identifier">is_palindrome</span></code>
875 takes a sequence and, optionally, a predicate. It will return true if the
876 predicate returns true for tested elements by algorithm in the sequence.
879 The routine come in 6 forms; the first one takes two iterators to define
880 the range. The second form takes two iterators to define the range and
881 a predicate. The third form takes a single range parameter, and uses Boost.Range
882 to traverse it. The fourth form takes a single range parameter ( uses Boost.Range
883 to traverse it) and a predicate. The fifth form takes a single C-string
884 and a predicate. The sixth form takes a single C-string.
887 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.h0"></a>
888 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.interface"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.interface">interface</a>
891 The function <code class="computeroutput"><span class="identifier">is_palindrome</span></code>
892 returns true if the predicate returns true any tested by algorithm items
893 in the sequence. There are six versions: 1) takes two iterators. 2) takes
894 two iterators and a predicate. 3) takes a range. 4) takes a range and a
895 predicate. 5) takes a C-string and a predicate. 6) takes a C-string.
899 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span>
900 <span class="keyword">bool</span> <span class="identifier">is_palindrome</span> <span class="special">(</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">begin</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">end</span> <span class="special">);</span>
901 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">></span>
902 <span class="keyword">bool</span> <span class="identifier">is_palindrome</span> <span class="special">(</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">begin</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">end</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">p</span> <span class="special">);</span>
903 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">></span>
904 <span class="keyword">bool</span> <span class="identifier">is_palindrome</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">Range</span> <span class="special">&</span><span class="identifier">r</span> <span class="special">);</span>
905 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">></span>
906 <span class="keyword">bool</span> <span class="identifier">is_palindrome</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">Range</span> <span class="special">&</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">p</span> <span class="special">);</span>
907 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">></span>
908 <span class="keyword">bool</span> <span class="identifier">is_palindrome</span> <span class="special">(</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">str</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">p</span> <span class="special">);</span>
909 <span class="keyword">bool</span> <span class="identifier">is_palindrome</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">str</span><span class="special">);</span>
914 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.h1"></a>
915 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.examples"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.examples">Examples</a>
918 Given the containers: const std::list<int> empty, const std::vector<char>
919 singleElement{'z'}, int oddNonPalindrome[] = {3,2,2}, const int oddPalindrome[]
920 = {1,2,3,2,1}, const int evenPalindrome[] = {1,2,2,1}, int evenNonPalindrome[]
923 <pre class="programlisting"><span class="identifier">is_palindrome</span><span class="special">(</span><span class="identifier">empty</span><span class="special">))</span> <span class="special">--></span> <span class="keyword">true</span> <span class="comment">//empty range </span>
924 <span class="identifier">is_palindrome</span><span class="special">(</span><span class="identifier">singleElement</span><span class="special">))</span> <span class="special">--></span> <span class="keyword">true</span>
925 <span class="identifier">is_palindrome</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">oddNonPalindrome</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">end</span><span class="special">(</span><span class="identifier">oddNonPalindrome</span><span class="special">)))</span> <span class="special">--></span> <span class="keyword">false</span>
926 <span class="identifier">is_palindrome</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">evenPalindrome</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">end</span><span class="special">(</span><span class="identifier">evenPalindrome</span><span class="special">)))</span> <span class="special">--></span> <span class="keyword">true</span>
927 <span class="identifier">is_palindrome</span><span class="special">(</span><span class="identifier">empty</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">empty</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">functorComparator</span><span class="special">()))</span> <span class="special">--></span> <span class="keyword">true</span> <span class="comment">//empty range </span>
928 <span class="identifier">is_palindrome</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">oddNonPalindrome</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">end</span><span class="special">(</span><span class="identifier">oddNonPalindrome</span><span class="special">),</span> <span class="identifier">funcComparator</span><span class="special"><</span><span class="keyword">int</span><span class="special">>))</span> <span class="special">--></span> <span class="keyword">false</span>
929 <span class="identifier">is_palindrome</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">oddPalindrome</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">end</span><span class="special">(</span><span class="identifier">oddPalindrome</span><span class="special">))</span> <span class="special">--></span> <span class="keyword">true</span>
930 <span class="identifier">is_palindrome</span><span class="special">(</span><span class="identifier">evenPalindrome</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">equal_to</span><span class="special"><</span><span class="keyword">int</span><span class="special">>()))</span> <span class="special">--></span> <span class="keyword">true</span>
931 <span class="identifier">is_palindrome</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">evenNonPalindrome</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">end</span><span class="special">(</span><span class="identifier">evenNonPalindrome</span><span class="special">))</span> <span class="special">--></span> <span class="keyword">false</span>
932 <span class="identifier">is_palindrome</span><span class="special">(</span><span class="string">"a"</span><span class="special">)</span> <span class="special">--></span> <span class="keyword">true</span>
933 <span class="identifier">is_palindrome</span><span class="special">(</span><span class="string">"aba"</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">equal_to</span><span class="special"><</span><span class="keyword">char</span><span class="special">>())</span> <span class="special">--></span> <span class="keyword">true</span>
938 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.h2"></a>
939 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.iterator_requirements"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.iterator_requirements">Iterator
943 <code class="computeroutput"><span class="identifier">is_palindrome</span></code> work on Bidirectional
944 and RandomAccess iterators.
947 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.h3"></a>
948 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.complexity"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.complexity">Complexity</a>
951 All of the variants of <code class="computeroutput"><span class="identifier">is_palindrome</span></code>
952 run in <span class="emphasis"><em>O(N)</em></span> (linear) time; that is, they compare against
953 each element in the list once. If any of the comparisons not succeed, the
954 algorithm will terminate immediately, without examining the remaining members
958 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.h4"></a>
959 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.exception_safety"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.exception_safety">Exception
963 All of the variants of <code class="computeroutput"><span class="identifier">is_palindrome</span></code>
964 take their parameters by value, const pointer or const reference, and do
965 not depend upon any global state. Therefore, all the routines in this file
966 provide the strong exception guarantee.
969 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.h5"></a>
970 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.notes"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_palindrome.notes">Notes</a>
972 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
973 <li class="listitem">
974 <code class="computeroutput"><span class="identifier">is_palindrome</span></code> returns
975 true for empty ranges, const char* null pointers and for single element
978 <li class="listitem">
979 If you use version of 'is_palindrome' without custom predicate, 'is_palindrome'
980 uses default 'operator==()' for elements.
982 <li class="listitem">
983 Be careful with using not null pointer 'const char*' without '\0' -
984 if you use it with 'is_palindrome', it's a undefined behaviour.
988 <div class="section">
989 <div class="titlepage"><div><div><h4 class="title">
990 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until"></a><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until" title="is_partitioned_until">is_partitioned_until
992 </h4></div></div></div>
994 The header file 'is_partitioned_until.hpp' contains two variants of a single
995 algorithm, <code class="computeroutput"><span class="identifier">is_partitioned_until</span></code>.
996 The algorithm tests to see if a sequence is partitioned according to a
997 predicate; in other words, all the items in the sequence that satisfy the
998 predicate are at the beginning of the sequence.
1001 The routine <code class="computeroutput"><span class="identifier">is_partitioned_until</span></code>
1002 takes a sequence and a predicate. It returns the last iterator 'it' in
1003 the sequence [begin, end) for which the is_partitioned(begin, it) is true.
1006 <code class="computeroutput"><span class="identifier">is_partitioned_until</span></code> come
1007 in two forms; the first one takes two iterators to define the range. The
1008 second form takes a single range parameter, and uses Boost.Range to traverse
1012 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.h0"></a>
1013 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.interface"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.interface">interface</a>
1016 The function <code class="computeroutput"><span class="identifier">is_partitioned_until</span></code>
1017 returns the last iterator 'it' in the sequence [begin, end) for which the
1018 is_partitioned(begin, it) is true. There are two versions; one takes two
1019 iterators, and the other takes a range.
1023 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">></span>
1024 <span class="identifier">InputIterator</span> <span class="identifier">is_partitioned_until</span> <span class="special">(</span> <span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">p</span> <span class="special">);</span>
1025 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">></span>
1026 <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">Range</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">is_partitioned_until</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">Range</span> <span class="special">&</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">p</span> <span class="special">);</span>
1031 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.h1"></a>
1032 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.examples"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.examples">Examples</a>
1035 Given the container <code class="computeroutput"><span class="identifier">c</span></code> containing
1036 <code class="computeroutput"><span class="special">{</span> <span class="number">0</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span>
1037 <span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">14</span><span class="special">,</span> <span class="number">15</span> <span class="special">}</span></code>,
1040 <pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">isOdd</span> <span class="special">(</span> <span class="keyword">int</span> <span class="identifier">i</span> <span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">i</span> <span class="special">%</span> <span class="number">2</span> <span class="special">==</span> <span class="number">1</span><span class="special">;</span> <span class="special">}</span>
1041 <span class="keyword">bool</span> <span class="identifier">lessThan10</span> <span class="special">(</span> <span class="keyword">int</span> <span class="identifier">i</span> <span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">10</span><span class="special">;</span> <span class="special">}</span>
1043 <span class="identifier">is_partitioned_until</span> <span class="special">(</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">isOdd</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">iterator</span> <span class="identifier">to</span> <span class="char">'1'</span>
1044 <span class="identifier">is_partitioned_until</span> <span class="special">(</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">lessThan10</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">end</span>
1045 <span class="identifier">is_partitioned_until</span> <span class="special">(</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span> <span class="special">(),</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span> <span class="special">(),</span> <span class="identifier">lessThan10</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">end</span>
1046 <span class="identifier">is_partitioned_until</span> <span class="special">(</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span> <span class="special">(),</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span> <span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">,</span> <span class="identifier">lessThan10</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">end</span>
1047 <span class="identifier">is_partitioned_until</span> <span class="special">(</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span> <span class="special">(),</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span> <span class="special">(),</span> <span class="identifier">isOdd</span> <span class="special">)</span> <span class="special">--></span> <span class="identifier">end</span> <span class="comment">// empty range</span>
1052 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.h2"></a>
1053 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.iterator_requirements"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.iterator_requirements">Iterator
1057 <code class="computeroutput"><span class="identifier">is_partitioned_until</span></code> works
1058 on all iterators except output iterators.
1061 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.h3"></a>
1062 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.complexity"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.complexity">Complexity</a>
1065 Both of the variants of <code class="computeroutput"><span class="identifier">is_partitioned_until</span></code>
1066 run in <span class="emphasis"><em>O(N)</em></span> (linear) time; that is, they compare against
1067 each element in the list once. If the sequence is found to be not partitioned
1068 at any point, the routine will terminate immediately, without examining
1069 the rest of the elements.
1072 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.h4"></a>
1073 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.exception_safety"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.exception_safety">Exception
1077 Both of the variants of <code class="computeroutput"><span class="identifier">is_partitioned_until</span></code>
1078 take their parameters by value or const reference, and do not depend upon
1079 any global state. Therefore, all the routines in this file provide the
1080 strong exception guarantee.
1083 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.h5"></a>
1084 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.notes"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.is_partitioned_until.notes">Notes</a>
1086 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
1087 <code class="computeroutput"><span class="identifier">is_partitioned_until</span></code>
1088 returns iterator to the end for empty and single-element ranges, no
1089 matter what predicate is passed to test against.
1092 <div class="section">
1093 <div class="titlepage"><div><div><h4 class="title">
1094 <a name="algorithm.Misc.misc_inner_algorithms.apply_reverse_permutation"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.apply_reverse_permutation" title="apply_reverse_permutation">apply_reverse_permutation
1096 </h4></div></div></div>
1101 <div class="section">
1102 <div class="titlepage"><div><div><h4 class="title">
1103 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation"></a><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation" title="apply_permutation">apply_permutation</a>
1104 </h4></div></div></div>
1106 The header file <code class="literal"><a class="link" href="../header/boost/algorithm/apply_permutation_hpp.html" title="Header <boost/algorithm/apply_permutation.hpp>">apply_permutation.hpp</a></code>
1107 contains two algorithms, <code class="computeroutput"><span class="identifier">apply_permutation</span></code>
1108 and <code class="computeroutput"><span class="identifier">apply_reverse_permutation</span></code>.
1109 There are also range-based versions. The algorithms transform the item
1110 sequence according to index sequence order.
1113 The routine <code class="computeroutput"><span class="identifier">apply_permutation</span></code>
1114 takes a item sequence and a order sequence. It reshuffles item sequence
1115 according to order sequence. Every value in order sequence means where
1116 the item comes from. Order sequence needs to be exactly a permutation of
1117 the sequence [0, 1, ... , N], where N is the biggest index in the item
1118 sequence (zero-indexed). The routine <code class="computeroutput"><span class="identifier">apply_reverse_permutation</span></code>
1119 takes a item sequence and a order sequence. It will reshuffle item sequence
1120 according to order sequence. Every value in order sequence means where
1121 the item goes to. Order sequence needs to be exactly a permutation of the
1122 sequence [0, 1, ... , N], where N is the biggest index in the item sequence
1126 Implementations are based on these articles: https://blogs.msdn.microsoft.com/oldnewthing/20170102-00/?p=95095
1127 https://blogs.msdn.microsoft.com/oldnewthing/20170103-00/?p=95105 https://blogs.msdn.microsoft.com/oldnewthing/20170104-00/?p=95115
1128 https://blogs.msdn.microsoft.com/oldnewthing/20170109-00/?p=95145 https://blogs.msdn.microsoft.com/oldnewthing/20170110-00/?p=95155
1129 https://blogs.msdn.microsoft.com/oldnewthing/20170111-00/?p=95165
1132 The routines come in 2 forms; the first one takes two iterators to define
1133 the item range and one iterator to define the beginning of index range.
1134 The second form takes range to define the item sequence and range to define
1138 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.h0"></a>
1139 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.interface"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.interface">interface</a>
1142 There are two versions of algorithms: 1) takes four iterators. 2) takes
1145 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RandomAccessIterator1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RandomAccessIterator2</span><span class="special">></span>
1146 <span class="keyword">void</span> <span class="identifier">apply_permutation</span><span class="special">(</span><span class="identifier">RandomAccessIterator1</span> <span class="identifier">item_begin</span><span class="special">,</span> <span class="identifier">RandomAccessIterator1</span> <span class="identifier">item_end</span><span class="special">,</span>
1147 <span class="identifier">RandomAccessIterator2</span> <span class="identifier">ind_begin</span><span class="special">,</span> <span class="identifier">RandomAccessIterator2</span> <span class="identifier">ind_end</span><span class="special">);</span>
1148 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Range2</span><span class="special">></span>
1149 <span class="keyword">void</span> <span class="identifier">apply_permutation</span><span class="special">(</span><span class="identifier">Range1</span><span class="special">&</span> <span class="identifier">item_range</span><span class="special">,</span> <span class="identifier">Range2</span><span class="special">&</span> <span class="identifier">ind_range</span><span class="special">);</span>
1150 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RandomAccessIterator1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RandomAccessIterator2</span><span class="special">></span>
1151 <span class="keyword">void</span> <span class="identifier">apply_reverse_permutation</span><span class="special">(</span><span class="identifier">RandomAccessIterator1</span> <span class="identifier">item_begin</span><span class="special">,</span> <span class="identifier">RandomAccessIterator1</span> <span class="identifier">item_end</span><span class="special">,</span>
1152 <span class="identifier">RandomAccessIterator2</span> <span class="identifier">ind_begin</span><span class="special">,</span> <span class="identifier">RandomAccessIterator2</span> <span class="identifier">ind_end</span><span class="special">);</span>
1153 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Range2</span><span class="special">></span>
1154 <span class="keyword">void</span> <span class="identifier">apply_reverse_permutation</span><span class="special">(</span><span class="identifier">Range1</span><span class="special">&</span> <span class="identifier">item_range</span><span class="special">,</span> <span class="identifier">Range2</span><span class="special">&</span> <span class="identifier">ind_range</span><span class="special">);</span>
1159 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.h1"></a>
1160 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.examples"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.examples">Examples</a>
1163 Given the containers: std::vector<int> emp_vec, emp_order, std::vector<int>
1164 one{1}, one_order{0}, std::vector<int> two{1,2}, two_order{1,0},
1165 std::vector<int> vec{1, 2, 3, 4, 5}, std::vector<int> order{4,
1168 <pre class="programlisting"><span class="identifier">apply_permutation</span><span class="special">(</span><span class="identifier">emp_vec</span><span class="special">,</span> <span class="identifier">emp_order</span><span class="special">))</span> <span class="special">--></span> <span class="identifier">no</span> <span class="identifier">changes</span>
1169 <span class="identifier">apply_reverse_permutation</span><span class="special">(</span><span class="identifier">emp_vec</span><span class="special">,</span> <span class="identifier">emp_order</span><span class="special">))</span> <span class="special">--></span> <span class="identifier">no</span> <span class="identifier">changes</span>
1170 <span class="identifier">apply_permutation</span><span class="special">(</span><span class="identifier">one</span><span class="special">,</span> <span class="identifier">one_order</span><span class="special">)</span> <span class="special">--></span> <span class="identifier">no</span> <span class="identifier">changes</span>
1171 <span class="identifier">apply_reverse_permutation</span><span class="special">(</span><span class="identifier">one</span><span class="special">,</span> <span class="identifier">one_order</span><span class="special">)</span> <span class="special">--></span> <span class="identifier">no</span> <span class="identifier">changes</span>
1172 <span class="identifier">apply_permutation</span><span class="special">(</span><span class="identifier">two</span><span class="special">,</span> <span class="identifier">two_order</span><span class="special">)</span> <span class="special">--></span> <span class="identifier">two</span><span class="special">:{</span><span class="number">2</span><span class="special">,</span><span class="number">1</span><span class="special">}</span>
1173 <span class="identifier">apply_reverse_permutation</span><span class="special">(</span><span class="identifier">two</span><span class="special">,</span> <span class="identifier">two_order</span><span class="special">)</span> <span class="special">--></span> <span class="identifier">two</span><span class="special">:{</span><span class="number">2</span><span class="special">,</span><span class="number">1</span><span class="special">}</span>
1174 <span class="identifier">apply_permutation</span><span class="special">(</span><span class="identifier">vec</span><span class="special">,</span> <span class="identifier">order</span><span class="special">)</span> <span class="special">--></span> <span class="identifier">vec</span><span class="special">:{</span><span class="number">5</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">1</span><span class="special">}</span>
1175 <span class="identifier">apply_reverse_permutation</span><span class="special">(</span><span class="identifier">vec</span><span class="special">,</span> <span class="identifier">order</span><span class="special">)</span> <span class="special">--></span> <span class="identifier">vec</span><span class="special">:{</span><span class="number">5</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">1</span><span class="special">}</span>
1180 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.h2"></a>
1181 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.iterator_requirements"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.iterator_requirements">Iterator
1185 <code class="computeroutput"><span class="identifier">apply_permutation</span></code> and 'apply_reverse_permutation'
1186 work only on RandomAccess iterators. RandomAccess iterators required both
1187 for item and index sequences.
1190 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.h3"></a>
1191 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.complexity"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.complexity">Complexity</a>
1194 All of the variants of <code class="computeroutput"><span class="identifier">apply_permutation</span></code>
1195 and <code class="computeroutput"><span class="identifier">apply_reverse_permutation</span></code>
1196 run in <span class="emphasis"><em>O(N)</em></span> (linear) time. More
1199 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.h4"></a>
1200 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.exception_safety"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.exception_safety">Exception
1204 All of the variants of <code class="computeroutput"><span class="identifier">apply_permutation</span></code>
1205 and <code class="computeroutput"><span class="identifier">apply_reverse_permutation</span></code>
1206 take their parameters by iterators or reference, and do not depend upon
1207 any global state. Therefore, all the routines in this file provide the
1208 strong exception guarantee.
1211 <a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.h5"></a>
1212 <span class="phrase"><a name="the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.notes"></a></span><a class="link" href="Misc.html#the_boost_algorithm_library.Misc.misc_inner_algorithms.apply_permutation.notes">Notes</a>
1214 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1215 <li class="listitem">
1216 If ItemSequence and IndexSequence are not equal, behavior is undefined.
1218 <li class="listitem">
1219 <code class="computeroutput"><span class="identifier">apply_permutation</span></code> and
1220 <code class="computeroutput"><span class="identifier">apply_reverse_permutation</span></code>
1221 work also on empty sequences.
1223 <li class="listitem">
1224 Order sequence must be zero-indexed.
1226 <li class="listitem">
1227 Order sequence gets permuted.
1231 <div class="section">
1232 <div class="titlepage"><div><div><h4 class="title">
1233 <a name="algorithm.Misc.misc_inner_algorithms.copy_until"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.copy_until" title="copy_until">copy_until
1235 </h4></div></div></div>
1237 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/cxx11/copy_if_hpp.html" title="Header <boost/algorithm/cxx11/copy_if.hpp>">copy_until</a>
1238 </code> </strong></span> Copy all the elements at the start of the input
1239 range that do not satisfy the predicate to the output range
1242 <div class="section">
1243 <div class="titlepage"><div><div><h4 class="title">
1244 <a name="algorithm.Misc.misc_inner_algorithms.copy_while"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.copy_while" title="copy_while">copy_while
1246 </h4></div></div></div>
1248 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/cxx11/copy_if_hpp.html" title="Header <boost/algorithm/cxx11/copy_if.hpp>">copy_while</a>
1249 </code> </strong></span> Copy all the elements at the start of the input
1250 range that satisfy the predicate to the output range
1253 <div class="section">
1254 <div class="titlepage"><div><div><h4 class="title">
1255 <a name="algorithm.Misc.misc_inner_algorithms.iota_n"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.iota_n" title="iota_n">iota_n
1257 </h4></div></div></div>
1259 <span class="bold"><strong><code class="literal"><a class="link" href="../boost/algorithm/iota_n.html" title="Function template iota_n">iota_n</a>
1260 </code> </strong></span> Write a sequence of n increasing values to an output
1264 <div class="section">
1265 <div class="titlepage"><div><div><h4 class="title">
1266 <a name="algorithm.Misc.misc_inner_algorithms.power"></a><a class="link" href="Misc.html#algorithm.Misc.misc_inner_algorithms.power" title="power">power
1268 </h4></div></div></div>
1270 <span class="bold"><strong><code class="literal"><a class="link" href="reference.html#header.boost.algorithm.algorithm_hpp" title="Header <boost/algorithm/algorithm.hpp>">power</a>
1271 </code> </strong></span> Raise a value to an integral power (<code class="literal">constexpr</code>
1277 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
1278 <td align="left"></td>
1279 <td align="right"><div class="copyright-footer">Copyright © 2010-2012 Marshall Clow<p>
1280 Distributed under the Boost Software License, Version 1.0. (See accompanying
1281 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
1286 <div class="spirit-nav">
1287 <a accesskey="p" href="CXX17.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="not_yet_documented_cxx17_algos.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>