3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>C++11 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="../the_boost_algorithm_library/Searching/KnuthMorrisPratt.html" title="Knuth-Morris-Pratt Search">
10 <link rel="next" href="CXX14.html" title="C++14 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="../the_boost_algorithm_library/Searching/KnuthMorrisPratt.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="CXX14.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.CXX11"></a><a class="link" href="CXX11.html" title="C++11 Algorithms">C++11 Algorithms</a>
28 </h2></div></div></div>
29 <div class="toc"><dl class="toc">
30 <dt><span class="section"><a href="CXX11.html#algorithm.CXX11.CXX11_inner_algorithms"></a></span></dt>
32 <dt><span class="section"><a href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of">all_of</a></span></dt>
33 <dt><span class="section"><a href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of">any_of</a></span></dt>
34 <dt><span class="section"><a href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of">none_of</a></span></dt>
35 <dt><span class="section"><a href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of">one_of</a></span></dt>
36 <dt><span class="section"><a href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_sorted">is_sorted
38 <dt><span class="section"><a href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned">is_partitioned
40 <dt><span class="section"><a href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation">is_permutation
42 <dt><span class="section"><a href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point">partition_point
44 <dt><span class="section"><a href="CXX11.html#algorithm.CXX11.CXX11_inner_algorithms.partition_copy">partition_copy
46 <dt><span class="section"><a href="CXX11.html#algorithm.CXX11.CXX11_inner_algorithms.copy_if">copy_if
48 <dt><span class="section"><a href="CXX11.html#algorithm.CXX11.CXX11_inner_algorithms.copy_n">copy_n
50 <dt><span class="section"><a href="CXX11.html#algorithm.CXX11.CXX11_inner_algorithms.iota">iota
55 <div class="titlepage"></div>
57 <div class="titlepage"><div><div><h4 class="title">
58 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of"></a><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of" title="all_of">all_of</a>
59 </h4></div></div></div>
61 The header file 'boost/algorithm/cxx11/all_of.hpp' contains four variants
62 of a single algorithm, <code class="computeroutput"><span class="identifier">all_of</span></code>.
63 The algorithm tests all the elements of a sequence and returns true if
64 they all share a property.
67 The routine <code class="computeroutput"><span class="identifier">all_of</span></code> takes
68 a sequence and a predicate. It will return true if the predicate returns
69 true when applied to every element in the sequence.
72 The routine <code class="computeroutput"><span class="identifier">all_of_equal</span></code>
73 takes a sequence and a value. It will return true if every element in the
74 sequence compares equal to the passed in value.
77 Both routines come in two forms; the first one takes two iterators to define
78 the range. The second form takes a single range parameter, and uses Boost.Range
82 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.h0"></a>
83 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.interface"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.interface">interface</a>
86 The function <code class="computeroutput"><span class="identifier">all_of</span></code> returns
87 true if the predicate returns true for every item in the sequence. There
88 are two versions; one takes two iterators, and the other takes a range.
92 <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>
93 <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>
94 <span class="keyword">bool</span> <span class="identifier">all_of</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>
95 <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>
96 <span class="keyword">bool</span> <span class="identifier">all_of</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>
97 <span class="special">}}</span>
102 The function <code class="computeroutput"><span class="identifier">all_of_equal</span></code>
103 is similar to <code class="computeroutput"><span class="identifier">all_of</span></code>, but
104 instead of taking a predicate to test the elements of the sequence, it
105 takes a value to compare against.
109 <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>
110 <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">V</span><span class="special">></span>
111 <span class="keyword">bool</span> <span class="identifier">all_of_equal</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">V</span> <span class="keyword">const</span> <span class="special">&</span><span class="identifier">val</span> <span class="special">);</span>
112 <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">V</span><span class="special">></span>
113 <span class="keyword">bool</span> <span class="identifier">all_of_equal</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">V</span> <span class="keyword">const</span> <span class="special">&</span><span class="identifier">val</span> <span class="special">);</span>
114 <span class="special">}}</span>
119 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.h1"></a>
120 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.examples"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.examples">Examples</a>
123 Given the container <code class="computeroutput"><span class="identifier">c</span></code> containing
124 <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>
125 <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>,
128 <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>
129 <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>
131 <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">algorithm</span><span class="special">;</span>
132 <span class="identifier">all_of</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="keyword">false</span>
133 <span class="identifier">all_of</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="keyword">false</span>
134 <span class="identifier">all_of</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="keyword">true</span>
135 <span class="identifier">all_of</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="keyword">true</span> <span class="comment">// empty range</span>
136 <span class="identifier">all_of_equal</span> <span class="special">(</span> <span class="identifier">c</span><span class="special">,</span> <span class="number">3</span> <span class="special">)</span> <span class="special">--></span> <span class="keyword">false</span>
137 <span class="identifier">all_of_equal</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">c</span><span class="special">.</span><span class="identifier">begin</span> <span class="special">()</span> <span class="special">+</span> <span class="number">4</span><span class="special">,</span> <span class="number">3</span> <span class="special">)</span> <span class="special">--></span> <span class="keyword">true</span>
138 <span class="identifier">all_of_equal</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="number">99</span> <span class="special">)</span> <span class="special">--></span> <span class="keyword">true</span> <span class="comment">// empty range</span>
143 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.h2"></a>
144 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.iterator_requirements"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.iterator_requirements">Iterator
148 <code class="computeroutput"><span class="identifier">all_of</span></code> and <code class="computeroutput"><span class="identifier">all_of_equal</span></code> work on all iterators except
152 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.h3"></a>
153 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.complexity"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.complexity">Complexity</a>
156 All of the variants of <code class="computeroutput"><span class="identifier">all_of</span></code>
157 and <code class="computeroutput"><span class="identifier">all_of_equal</span></code> run in
158 <span class="emphasis"><em>O(N)</em></span> (linear) time; that is, they compare against
159 each element in the list once. If any of the comparisons fail, the algorithm
160 will terminate immediately, without examining the remaining members of
164 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.h4"></a>
165 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.exception_safety"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.exception_safety">Exception
169 All of the variants of <code class="computeroutput"><span class="identifier">all_of</span></code>
170 and <code class="computeroutput"><span class="identifier">all_of_equal</span></code> take their
171 parameters by value or const reference, and do not depend upon any global
172 state. Therefore, all the routines in this file provide the strong exception
176 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.h5"></a>
177 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.notes"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.all_of.notes">Notes</a>
179 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
180 <li class="listitem">
181 The routine <code class="computeroutput"><span class="identifier">all_of</span></code>
182 is also available as part of the C++11 standard.
184 <li class="listitem">
185 <code class="computeroutput"><span class="identifier">all_of</span></code> and <code class="computeroutput"><span class="identifier">all_of_equal</span></code> both return true for
186 empty ranges, no matter what is passed to test against. When there
187 are no items in the sequence to test, they all satisfy the condition
188 to be tested against.
190 <li class="listitem">
191 The second parameter to <code class="computeroutput"><span class="identifier">all_of_value</span></code>
192 is a template parameter, rather than deduced from the first parameter
193 (<code class="computeroutput"><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></code>) because that allows more
194 flexibility for callers, and takes advantage of built-in comparisons
195 for the type that is pointed to by the iterator. The function is defined
196 to return true if, for all elements in the sequence, the expression
197 <code class="computeroutput"><span class="special">*</span><span class="identifier">iter</span>
198 <span class="special">==</span> <span class="identifier">val</span></code>
199 evaluates to true (where <code class="computeroutput"><span class="identifier">iter</span></code>
200 is an iterator to each element in the sequence)
204 <div class="section">
205 <div class="titlepage"><div><div><h4 class="title">
206 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of"></a><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of" title="any_of">any_of</a>
207 </h4></div></div></div>
209 The header file 'boost/algorithm/cxx11/any_of.hpp' contains four variants
210 of a single algorithm, <code class="computeroutput"><span class="identifier">any_of</span></code>.
211 The algorithm tests the elements of a sequence and returns true if any
212 of the elements has a particular property.
215 The routine <code class="computeroutput"><span class="identifier">any_of</span></code> takes
216 a sequence and a predicate. It will return true if the predicate returns
217 true for any element in the sequence.
220 The routine <code class="computeroutput"><span class="identifier">any_of_equal</span></code>
221 takes a sequence and a value. It will return true if any element in the
222 sequence compares equal to the passed in value.
225 Both routines come in two forms; the first one takes two iterators to define
226 the range. The second form takes a single range parameter, and uses Boost.Range
230 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.h0"></a>
231 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.interface"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.interface">interface</a>
234 The function <code class="computeroutput"><span class="identifier">any_of</span></code> returns
235 true if the predicate returns true any item in the sequence. There are
236 two versions; one takes two iterators, and the other takes a range.
240 <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>
241 <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>
242 <span class="keyword">bool</span> <span class="identifier">any_of</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>
243 <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>
244 <span class="keyword">bool</span> <span class="identifier">any_of</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>
245 <span class="special">}}</span>
250 The function <code class="computeroutput"><span class="identifier">any_of_equal</span></code>
251 is similar to <code class="computeroutput"><span class="identifier">any_of</span></code>, but
252 instead of taking a predicate to test the elements of the sequence, it
253 takes a value to compare against.
257 <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>
258 <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">V</span><span class="special">></span>
259 <span class="keyword">bool</span> <span class="identifier">any_of_equal</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">V</span> <span class="keyword">const</span> <span class="special">&</span><span class="identifier">val</span> <span class="special">);</span>
260 <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">V</span><span class="special">></span>
261 <span class="keyword">bool</span> <span class="identifier">any_of_equal</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">V</span> <span class="keyword">const</span> <span class="special">&</span><span class="identifier">val</span> <span class="special">);</span>
262 <span class="special">}}</span>
267 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.h1"></a>
268 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.examples"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.examples">Examples</a>
271 Given the container <code class="computeroutput"><span class="identifier">c</span></code> containing
272 <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>
273 <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>,
276 <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>
277 <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>
279 <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">algorithm</span><span class="special">;</span>
280 <span class="identifier">any_of</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="keyword">true</span>
281 <span class="identifier">any_of</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="keyword">true</span>
282 <span class="identifier">any_of</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">4</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="keyword">false</span>
283 <span class="identifier">any_of</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="keyword">false</span> <span class="comment">// empty range</span>
284 <span class="identifier">any_of_equal</span> <span class="special">(</span> <span class="identifier">c</span><span class="special">,</span> <span class="number">3</span> <span class="special">)</span> <span class="special">--></span> <span class="keyword">true</span>
285 <span class="identifier">any_of_equal</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="number">3</span> <span class="special">)</span> <span class="special">--></span> <span class="keyword">false</span>
286 <span class="identifier">any_of_equal</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="number">99</span> <span class="special">)</span> <span class="special">--></span> <span class="keyword">false</span> <span class="comment">// empty range</span>
291 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.h2"></a>
292 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.iterator_requirements"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.iterator_requirements">Iterator
296 <code class="computeroutput"><span class="identifier">any_of</span></code> and <code class="computeroutput"><span class="identifier">any_of_equal</span></code> work on all iterators except
300 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.h3"></a>
301 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.complexity"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.complexity">Complexity</a>
304 All of the variants of <code class="computeroutput"><span class="identifier">any_of</span></code>
305 and <code class="computeroutput"><span class="identifier">any_of_equal</span></code> run in
306 <span class="emphasis"><em>O(N)</em></span> (linear) time; that is, they compare against
307 each element in the list once. If any of the comparisons succeed, the algorithm
308 will terminate immediately, without examining the remaining members of
312 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.h4"></a>
313 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.exception_safety"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.exception_safety">Exception
317 All of the variants of <code class="computeroutput"><span class="identifier">any_of</span></code>
318 and <code class="computeroutput"><span class="identifier">any_of_equal</span></code> take their
319 parameters by value or const reference, and do not depend upon any global
320 state. Therefore, all the routines in this file provide the strong exception
324 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.h5"></a>
325 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.notes"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.any_of.notes">Notes</a>
327 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
328 <li class="listitem">
329 The routine <code class="computeroutput"><span class="identifier">any_of</span></code>
330 is also available as part of the C++11 standard.
332 <li class="listitem">
333 <code class="computeroutput"><span class="identifier">any_of</span></code> and <code class="computeroutput"><span class="identifier">any_of_equal</span></code> both return false for
334 empty ranges, no matter what is passed to test against.
336 <li class="listitem">
337 The second parameter to <code class="computeroutput"><span class="identifier">any_of_value</span></code>
338 is a template parameter, rather than deduced from the first parameter
339 (<code class="computeroutput"><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></code>) because that allows more
340 flexibility for callers, and takes advantage of built-in comparisons
341 for the type that is pointed to by the iterator. The function is defined
342 to return true if, for any element in the sequence, the expression
343 <code class="computeroutput"><span class="special">*</span><span class="identifier">iter</span>
344 <span class="special">==</span> <span class="identifier">val</span></code>
345 evaluates to true (where <code class="computeroutput"><span class="identifier">iter</span></code>
346 is an iterator to each element in the sequence)
350 <div class="section">
351 <div class="titlepage"><div><div><h4 class="title">
352 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of"></a><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of" title="none_of">none_of</a>
353 </h4></div></div></div>
355 The header file 'boost/algorithm/cxx11/none_of.hpp' contains four variants
356 of a single algorithm, <code class="computeroutput"><span class="identifier">none_of</span></code>.
357 The algorithm tests all the elements of a sequence and returns true if
358 they none of them share a property.
361 The routine <code class="computeroutput"><span class="identifier">none_of</span></code> takes
362 a sequence and a predicate. It will return true if the predicate returns
363 false when applied to every element in the sequence.
366 The routine <code class="computeroutput"><span class="identifier">none_of_equal</span></code>
367 takes a sequence and a value. It will return true if none of the elements
368 in the sequence compare equal to the passed in value.
371 Both routines come in two forms; the first one takes two iterators to define
372 the range. The second form takes a single range parameter, and uses Boost.Range
376 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.h0"></a>
377 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.interface"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.interface">interface</a>
380 The function <code class="computeroutput"><span class="identifier">none_of</span></code> returns
381 true if the predicate returns false for every item in the sequence. There
382 are two versions; one takes two iterators, and the other takes a range.
386 <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>
387 <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>
388 <span class="keyword">bool</span> <span class="identifier">none_of</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>
389 <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>
390 <span class="keyword">bool</span> <span class="identifier">none_of</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>
391 <span class="special">}}</span>
396 The function <code class="computeroutput"><span class="identifier">none_of_equal</span></code>
397 is similar to <code class="computeroutput"><span class="identifier">none_of</span></code>,
398 but instead of taking a predicate to test the elements of the sequence,
399 it takes a value to compare against.
403 <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>
404 <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">V</span><span class="special">></span>
405 <span class="keyword">bool</span> <span class="identifier">none_of_equal</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">V</span> <span class="keyword">const</span> <span class="special">&</span><span class="identifier">val</span> <span class="special">);</span>
406 <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">V</span><span class="special">></span>
407 <span class="keyword">bool</span> <span class="identifier">none_of_equal</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">V</span> <span class="keyword">const</span> <span class="special">&</span><span class="identifier">val</span> <span class="special">);</span>
408 <span class="special">}}</span>
413 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.h1"></a>
414 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.examples"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.examples">Examples</a>
417 Given the container <code class="computeroutput"><span class="identifier">c</span></code> containing
418 <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>
419 <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>,
422 <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>
423 <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>
425 <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">algorithm</span><span class="special">;</span>
427 <span class="identifier">none_of</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="keyword">false</span>
428 <span class="identifier">none_of</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="keyword">false</span>
429 <span class="identifier">none_of</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">4</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="keyword">true</span>
430 <span class="identifier">none_of</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="keyword">true</span> <span class="comment">// empty range</span>
431 <span class="identifier">none_of_equal</span> <span class="special">(</span> <span class="identifier">c</span><span class="special">,</span> <span class="number">3</span> <span class="special">)</span> <span class="special">--></span> <span class="keyword">false</span>
432 <span class="identifier">none_of_equal</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="number">3</span> <span class="special">)</span> <span class="special">--></span> <span class="keyword">true</span>
433 <span class="identifier">none_of_equal</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="number">99</span> <span class="special">)</span> <span class="special">--></span> <span class="keyword">true</span> <span class="comment">// empty range</span>
438 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.h2"></a>
439 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.iterator_requirements"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.iterator_requirements">Iterator
443 <code class="computeroutput"><span class="identifier">none_of</span></code> and <code class="computeroutput"><span class="identifier">none_of_equal</span></code> work on all iterators except
447 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.h3"></a>
448 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.complexity"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.complexity">Complexity</a>
451 All of the variants of <code class="computeroutput"><span class="identifier">none_of</span></code>
452 and <code class="computeroutput"><span class="identifier">none_of_equal</span></code> run in
453 <span class="emphasis"><em>O(N)</em></span> (linear) time; that is, they compare against
454 each element in the list once. If any of the comparisons succeed, the algorithm
455 will terminate immediately, without examining the remaining members of
459 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.h4"></a>
460 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.exception_safety"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.exception_safety">Exception
464 All of the variants of <code class="computeroutput"><span class="identifier">none_of</span></code>
465 and <code class="computeroutput"><span class="identifier">none_of_equal</span></code> take
466 their parameters by value or const reference, and do not depend upon any
467 global state. Therefore, all the routines in this file provide the strong
471 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.h5"></a>
472 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.notes"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.none_of.notes">Notes</a>
474 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
475 <li class="listitem">
476 The routine <code class="computeroutput"><span class="identifier">none_of</span></code>
477 is also available as part of the C++11 standard.
479 <li class="listitem">
480 <code class="computeroutput"><span class="identifier">none_of</span></code> and <code class="computeroutput"><span class="identifier">none_of_equal</span></code> both return true for
481 empty ranges, no matter what is passed to test against.
483 <li class="listitem">
484 The second parameter to <code class="computeroutput"><span class="identifier">none_of_value</span></code>
485 is a template parameter, rather than deduced from the first parameter
486 (<code class="computeroutput"><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></code>) because that allows more
487 flexibility for callers, and takes advantage of built-in comparisons
488 for the type that is pointed to by the iterator. The function is defined
489 to return true if, for all elements in the sequence, the expression
490 <code class="computeroutput"><span class="special">*</span><span class="identifier">iter</span>
491 <span class="special">==</span> <span class="identifier">val</span></code>
492 evaluates to false (where <code class="computeroutput"><span class="identifier">iter</span></code>
493 is an iterator to each element in the sequence)
497 <div class="section">
498 <div class="titlepage"><div><div><h4 class="title">
499 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of"></a><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of" title="one_of">one_of</a>
500 </h4></div></div></div>
502 The header file 'boost/algorithm/cxx11/one_of.hpp' contains four variants
503 of a single algorithm, <code class="computeroutput"><span class="identifier">one_of</span></code>.
504 The algorithm tests the elements of a sequence and returns true if exactly
505 one of the elements in the sequence has a particular property.
508 The routine <code class="computeroutput"><span class="identifier">one_of</span></code> takes
509 a sequence and a predicate. It will return true if the predicate returns
510 true for one element in the sequence.
513 The routine <code class="computeroutput"><span class="identifier">one_of_equal</span></code>
514 takes a sequence and a value. It will return true if one element in the
515 sequence compares equal to the passed in value.
518 Both routines come in two forms; the first one takes two iterators to define
519 the range. The second form takes a single range parameter, and uses Boost.Range
523 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.h0"></a>
524 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.interface"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.interface">interface</a>
527 The function <code class="computeroutput"><span class="identifier">one_of</span></code> returns
528 true if the predicate returns true for one item in the sequence. There
529 are two versions; one takes two iterators, and the other takes a range.
533 <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>
534 <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>
535 <span class="keyword">bool</span> <span class="identifier">one_of</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>
536 <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>
537 <span class="keyword">bool</span> <span class="identifier">one_of</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>
538 <span class="special">}}</span>
543 The function <code class="computeroutput"><span class="identifier">one_of_equal</span></code>
544 is similar to <code class="computeroutput"><span class="identifier">one_of</span></code>, but
545 instead of taking a predicate to test the elements of the sequence, it
546 takes a value to compare against.
550 <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>
551 <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">V</span><span class="special">></span>
552 <span class="keyword">bool</span> <span class="identifier">one_of_equal</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">V</span> <span class="keyword">const</span> <span class="special">&</span><span class="identifier">val</span> <span class="special">);</span>
553 <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">V</span><span class="special">></span>
554 <span class="keyword">bool</span> <span class="identifier">one_of_equal</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">V</span> <span class="keyword">const</span> <span class="special">&</span><span class="identifier">val</span> <span class="special">);</span>
555 <span class="special">}}</span>
560 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.h1"></a>
561 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.examples"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.examples">Examples</a>
564 Given the container <code class="computeroutput"><span class="identifier">c</span></code> containing
565 <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>
566 <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>,
569 <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>
570 <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>
572 <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">algorithm</span><span class="special">;</span>
573 <span class="identifier">one_of</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="keyword">false</span>
574 <span class="identifier">one_of</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="keyword">false</span>
575 <span class="identifier">one_of</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">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="keyword">true</span>
576 <span class="identifier">one_of</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="keyword">false</span> <span class="comment">// empty range</span>
577 <span class="identifier">one_of_equal</span> <span class="special">(</span> <span class="identifier">c</span><span class="special">,</span> <span class="number">3</span> <span class="special">)</span> <span class="special">--></span> <span class="keyword">true</span>
578 <span class="identifier">one_of_equal</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="number">3</span> <span class="special">)</span> <span class="special">--></span> <span class="keyword">false</span>
579 <span class="identifier">one_of_equal</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="number">99</span> <span class="special">)</span> <span class="special">--></span> <span class="keyword">false</span> <span class="comment">// empty range</span>
584 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.h2"></a>
585 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.iterator_requirements"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.iterator_requirements">Iterator
589 <code class="computeroutput"><span class="identifier">one_of</span></code> and <code class="computeroutput"><span class="identifier">one_of_equal</span></code> work on all iterators except
593 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.h3"></a>
594 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.complexity"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.complexity">Complexity</a>
597 All of the variants of <code class="computeroutput"><span class="identifier">one_of</span></code>
598 and <code class="computeroutput"><span class="identifier">one_of_equal</span></code> run in
599 <span class="emphasis"><em>O(N)</em></span> (linear) time; that is, they compare against
600 each element in the list once. If more than one of the elements in the
601 sequence satisfy the condition, then algorithm will return false immediately,
602 without examining the remaining members of the sequence.
605 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.h4"></a>
606 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.exception_safety"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.exception_safety">Exception
610 All of the variants of <code class="computeroutput"><span class="identifier">one_of</span></code>
611 and <code class="computeroutput"><span class="identifier">one_of_equal</span></code> take their
612 parameters by value or const reference, and do not depend upon any global
613 state. Therefore, all the routines in this file provide the strong exception
617 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.h5"></a>
618 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.notes"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.one_of.notes">Notes</a>
620 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
621 <li class="listitem">
622 <code class="computeroutput"><span class="identifier">one_of</span></code> and <code class="computeroutput"><span class="identifier">one_of_equal</span></code> both return false for
623 empty ranges, no matter what is passed to test against.
625 <li class="listitem">
626 The second parameter to <code class="computeroutput"><span class="identifier">one_of_equal</span></code>
627 is a template parameter, rather than deduced from the first parameter
628 (<code class="computeroutput"><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></code>) because that allows more
629 flexibility for callers, and takes advantage of built-in comparisons
630 for the type that is pointed to by the iterator. The function is defined
631 to return true if, for one element in the sequence, the expression
632 <code class="computeroutput"><span class="special">*</span><span class="identifier">iter</span>
633 <span class="special">==</span> <span class="identifier">val</span></code>
634 evaluates to true (where <code class="computeroutput"><span class="identifier">iter</span></code>
635 is an iterator to each element in the sequence)
639 <div class="section">
640 <div class="titlepage"><div><div><h4 class="title">
641 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_sorted"></a><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_sorted" title="is_sorted">is_sorted
643 </h4></div></div></div>
645 The header file <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">cxx11</span><span class="special">/</span><span class="identifier">is_sorted</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> contains functions for determining
646 if a sequence is ordered.
649 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_sorted.h0"></a>
650 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_sorted.is_sorted"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_sorted.is_sorted">is_sorted</a>
653 The function <code class="computeroutput"><span class="identifier">is_sorted</span><span class="special">(</span><span class="identifier">sequence</span><span class="special">)</span></code> determines whether or not a sequence is
654 completely sorted according so some criteria. If no comparison predicate
655 is specified, then <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span></code>
656 is used (i.e, the test is to see if the sequence is non-decreasing)
660 <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>
661 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ForwardIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Pred</span><span class="special">></span>
662 <span class="keyword">bool</span> <span class="identifier">is_sorted</span> <span class="special">(</span> <span class="identifier">ForwardIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">ForwardIterator</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">Pred</span> <span class="identifier">p</span> <span class="special">);</span>
664 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ForwardIterator</span><span class="special">></span>
665 <span class="keyword">bool</span> <span class="identifier">is_sorted</span> <span class="special">(</span> <span class="identifier">ForwardIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">ForwardIterator</span> <span class="identifier">last</span> <span class="special">);</span>
668 <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>
669 <span class="keyword">bool</span> <span class="identifier">is_sorted</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">Pred</span> <span class="identifier">p</span> <span class="special">);</span>
671 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">></span>
672 <span class="keyword">bool</span> <span class="identifier">is_sorted</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>
673 <span class="special">}}</span>
678 Iterator requirements: The <code class="computeroutput"><span class="identifier">is_sorted</span></code>
679 functions will work forward iterators or better.
682 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_sorted.h1"></a>
683 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_sorted.is_sorted_until"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_sorted.is_sorted_until">is_sorted_until</a>
686 If <code class="computeroutput"><span class="identifier">distance</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">)</span> <span class="special"><</span> <span class="number">2</span></code>, then
687 <code class="computeroutput"><span class="identifier">is_sorted</span> <span class="special">(</span>
688 <span class="identifier">first</span><span class="special">,</span>
689 <span class="identifier">last</span> <span class="special">)</span></code>
690 returns <code class="computeroutput"><span class="identifier">last</span></code>. Otherwise,
691 it returns the last iterator i in [first,last] for which the range [first,i)
695 In short, it returns the element in the sequence that is "out of order".
696 If the entire sequence is sorted (according to the predicate), then it
697 will return <code class="computeroutput"><span class="identifier">last</span></code>.
701 <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>
702 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ForwardIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Pred</span><span class="special">></span>
703 <span class="identifier">FI</span> <span class="identifier">is_sorted_until</span> <span class="special">(</span> <span class="identifier">ForwardIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">ForwardIterator</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">Pred</span> <span class="identifier">p</span> <span class="special">);</span>
705 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ForwardIterator</span><span class="special">></span>
706 <span class="identifier">ForwardIterator</span> <span class="identifier">is_sorted_until</span> <span class="special">(</span> <span class="identifier">ForwardIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">ForwardIterator</span> <span class="identifier">last</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">Pred</span><span class="special">></span>
710 <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">R</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">is_sorted_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">Pred</span> <span class="identifier">p</span> <span class="special">);</span>
712 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">></span>
713 <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">R</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">is_sorted_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>
714 <span class="special">}}</span>
719 Iterator requirements: The <code class="computeroutput"><span class="identifier">is_sorted_until</span></code>
720 functions will work on forward iterators or better. Since they have to
721 return a place in the input sequence, input iterators will not suffice.
724 Complexity: <code class="computeroutput"><span class="identifier">is_sorted_until</span></code>
725 will make at most <span class="emphasis"><em>N-1</em></span> calls to the predicate (given
726 a sequence of length <span class="emphasis"><em>N</em></span>).
732 Given the sequence <code class="computeroutput"><span class="special">{</span> <span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span>
733 <span class="number">3</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">3</span> <span class="special">}</span></code>,
734 <code class="computeroutput"><span class="identifier">is_sorted_until</span> <span class="special">(</span>
735 <span class="identifier">beg</span><span class="special">,</span>
736 <span class="identifier">end</span><span class="special">,</span>
737 <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special"><</span><span class="keyword">int</span><span class="special">>())</span></code>
738 would return an iterator pointing at the second <code class="computeroutput"><span class="number">3</span></code>.
741 Given the sequence <code class="computeroutput"><span class="special">{</span> <span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span>
742 <span class="number">3</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">9</span> <span class="special">}</span></code>,
743 <code class="computeroutput"><span class="identifier">is_sorted_until</span> <span class="special">(</span>
744 <span class="identifier">beg</span><span class="special">,</span>
745 <span class="identifier">end</span><span class="special">,</span>
746 <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special"><</span><span class="keyword">int</span><span class="special">>())</span></code>
747 would return <code class="computeroutput"><span class="identifier">end</span></code>.
750 There are also a set of "wrapper functions" for is_ordered which
751 make it easy to see if an entire sequence is ordered. These functions return
752 a boolean indicating success or failure rather than an iterator to where
753 the out of order items were found.
756 To test if a sequence is increasing (each element at least as large as
759 <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>
760 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">></span>
761 <span class="keyword">bool</span> <span class="identifier">is_increasing</span> <span class="special">(</span> <span class="identifier">Iterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">Iterator</span> <span class="identifier">last</span> <span class="special">);</span>
763 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">></span>
764 <span class="keyword">bool</span> <span class="identifier">is_increasing</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">R</span> <span class="special">&</span><span class="identifier">range</span> <span class="special">);</span>
765 <span class="special">}}</span>
770 To test if a sequence is decreasing (each element no larger than the preceding
775 <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>
776 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ForwardIterator</span><span class="special">></span>
777 <span class="keyword">bool</span> <span class="identifier">is_decreasing</span> <span class="special">(</span> <span class="identifier">ForwardIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">ForwardIterator</span> <span class="identifier">last</span> <span class="special">);</span>
779 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">></span>
780 <span class="keyword">bool</span> <span class="identifier">is_decreasing</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">R</span> <span class="special">&</span><span class="identifier">range</span> <span class="special">);</span>
781 <span class="special">}}</span>
786 To test if a sequence is strictly increasing (each element larger than
789 <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>
790 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ForwardIterator</span><span class="special">></span>
791 <span class="keyword">bool</span> <span class="identifier">is_strictly_increasing</span> <span class="special">(</span> <span class="identifier">ForwardIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">ForwardIterator</span> <span class="identifier">last</span> <span class="special">);</span>
793 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">></span>
794 <span class="keyword">bool</span> <span class="identifier">is_strictly_increasing</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">R</span> <span class="special">&</span><span class="identifier">range</span> <span class="special">);</span>
795 <span class="special">}}</span>
800 To test if a sequence is strictly decreasing (each element smaller than
803 <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>
804 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ForwardIterator</span><span class="special">></span>
805 <span class="keyword">bool</span> <span class="identifier">is_strictly_decreasing</span> <span class="special">(</span> <span class="identifier">ForwardIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">ForwardIterator</span> <span class="identifier">last</span> <span class="special">);</span>
807 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">></span>
808 <span class="keyword">bool</span> <span class="identifier">is_strictly_decreasing</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">R</span> <span class="special">&</span><span class="identifier">range</span> <span class="special">);</span>
809 <span class="special">}}</span>
814 Complexity: Each of these calls is just a thin wrapper over <code class="computeroutput"><span class="identifier">is_sorted</span></code>, so they have the same complexity
815 as <code class="computeroutput"><span class="identifier">is_sorted</span></code>.
818 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_sorted.h2"></a>
819 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_sorted.notes"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_sorted.notes">Notes</a>
821 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
822 <li class="listitem">
823 The routines <code class="computeroutput"><span class="identifier">is_sorted</span></code>
824 and <code class="computeroutput"><span class="identifier">is_sorted_until</span></code>
825 are part of the C++11 standard. When compiled using a C++11 implementation,
826 the implementation from the standard library will be used.
828 <li class="listitem">
829 <code class="computeroutput"><span class="identifier">is_sorted</span></code> and <code class="computeroutput"><span class="identifier">is_sorted_until</span></code> both return true
830 for empty ranges and ranges of length one.
834 <div class="section">
835 <div class="titlepage"><div><div><h4 class="title">
836 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned"></a><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned" title="is_partitioned">is_partitioned
838 </h4></div></div></div>
840 The header file 'is_partitioned.hpp' contains two variants of a single
841 algorithm, <code class="computeroutput"><span class="identifier">is_partitioned</span></code>.
842 The algorithm tests to see if a sequence is partitioned according to a
843 predicate; in other words, all the items in the sequence that satisfy the
844 predicate are at the beginning of the sequence.
847 The routine <code class="computeroutput"><span class="identifier">is_partitioned</span></code>
848 takes a sequence and a predicate. It returns true if the sequence is partitioned
849 according to the predicate.
852 <code class="computeroutput"><span class="identifier">is_partitioned</span></code> come in
853 two forms; the first one takes two iterators to define the range. The second
854 form takes a single range parameter, and uses Boost.Range to traverse it.
857 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.h0"></a>
858 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.interface"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.interface">interface</a>
861 The function <code class="computeroutput"><span class="identifier">is_partitioned</span></code>
862 returns true if the items in the sequence are separated according to their
863 ability to satisfy the predicate. There are two versions; one takes two
864 iterators, and the other takes a range.
868 <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>
869 <span class="keyword">bool</span> <span class="identifier">is_partitioned</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>
870 <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>
871 <span class="keyword">bool</span> <span class="identifier">is_partitioned</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>
876 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.h1"></a>
877 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.examples"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.examples">Examples</a>
880 Given the container <code class="computeroutput"><span class="identifier">c</span></code> containing
881 <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>
882 <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>,
885 <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>
886 <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>
888 <span class="identifier">is_partitioned</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="keyword">false</span>
889 <span class="identifier">is_partitioned</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="keyword">true</span>
890 <span class="identifier">is_partitioned</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="keyword">true</span>
891 <span class="identifier">is_partitioned</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="keyword">true</span>
892 <span class="identifier">is_partitioned</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="keyword">true</span> <span class="comment">// empty range</span>
897 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.h2"></a>
898 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.iterator_requirements"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.iterator_requirements">Iterator
902 <code class="computeroutput"><span class="identifier">is_partitioned</span></code> works on
903 all iterators except output iterators.
906 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.h3"></a>
907 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.complexity"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.complexity">Complexity</a>
910 Both of the variants of <code class="computeroutput"><span class="identifier">is_partitioned</span></code>
911 run in <span class="emphasis"><em>O(N)</em></span> (linear) time; that is, they compare against
912 each element in the list once. If the sequence is found to be not partitioned
913 at any point, the routine will terminate immediately, without examining
914 the rest of the elements.
917 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.h4"></a>
918 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.exception_safety"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.exception_safety">Exception
922 Both of the variants of <code class="computeroutput"><span class="identifier">is_partitioned</span></code>
923 take their parameters by value or const reference, and do not depend upon
924 any global state. Therefore, all the routines in this file provide the
925 strong exception guarantee.
928 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.h5"></a>
929 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.notes"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_partitioned.notes">Notes</a>
931 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
932 <li class="listitem">
933 The iterator-based version of the routine <code class="computeroutput"><span class="identifier">is_partitioned</span></code>
934 is also available as part of the C++11 standard.
936 <li class="listitem">
937 <code class="computeroutput"><span class="identifier">is_partitioned</span></code> returns
938 true for empty and single-element ranges, no matter what predicate
939 is passed to test against.
943 <div class="section">
944 <div class="titlepage"><div><div><h4 class="title">
945 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation"></a><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation" title="is_permutation">is_permutation
947 </h4></div></div></div>
949 The header file 'is_permutation.hpp' contains six variants of a single
950 algorithm, <code class="computeroutput"><span class="identifier">is_permutation</span></code>.
951 The algorithm tests to see if one sequence is a permutation of a second
952 one; in other words, it contains all the same members, possibly in a different
956 The routine <code class="computeroutput"><span class="identifier">is_permutation</span></code>
957 takes two sequences and an (optional) predicate. It returns true if the
958 two sequences contain the same members. If it is passed a predicate, it
959 uses the predicate to compare the elements of the sequence to see if they
963 <code class="computeroutput"><span class="identifier">is_permutation</span></code> come in
964 three forms. The first one takes two iterators to define the first range,
965 and the starting iterator of the second range. The second form takes a
966 two iterators to define the first range and two more to define the second
967 range. The third form takes a single range parameter, and uses Boost.Range
971 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.h0"></a>
972 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.interface"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.interface">Interface</a>
975 The function <code class="computeroutput"><span class="identifier">is_permutation</span></code>
976 returns true if the two input sequences contain the same elements. There
977 are six versions; two take three iterators, two take four iterators, and
978 the other two take two ranges.
981 In general, you should prefer the four iterator versions over the three
982 iterator ones. The three iterator version has to "create" the
983 fourth iterator internally by calling <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">advance</span><span class="special">(</span><span class="identifier">first2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">first1</span><span class="special">,</span><span class="identifier">last1</span><span class="special">))</span></code>, and if the second sequence is shorter
984 than the first, that's undefined behavior.
988 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">ForwardIterator1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ForwardIterator2</span> <span class="special">></span>
989 <span class="keyword">bool</span> <span class="identifier">is_permutation</span> <span class="special">(</span> <span class="identifier">ForwardIterator1</span> <span class="identifier">first1</span><span class="special">,</span> <span class="identifier">ForwardIterator1</span> <span class="identifier">last1</span><span class="special">,</span> <span class="identifier">ForwardIterator2</span> <span class="identifier">first2</span> <span class="special">);</span>
991 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">ForwardIterator1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ForwardIterator2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BinaryPredicate</span> <span class="special">></span>
992 <span class="keyword">bool</span> <span class="identifier">is_permutation</span> <span class="special">(</span> <span class="identifier">ForwardIterator1</span> <span class="identifier">first1</span><span class="special">,</span> <span class="identifier">ForwardIterator1</span> <span class="identifier">last1</span><span class="special">,</span>
993 <span class="identifier">ForwardIterator2</span> <span class="identifier">first2</span><span class="special">,</span> <span class="identifier">BinaryPredicate</span> <span class="identifier">p</span> <span class="special">);</span>
996 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">ForwardIterator1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ForwardIterator2</span> <span class="special">></span>
997 <span class="keyword">bool</span> <span class="identifier">is_permutation</span> <span class="special">(</span> <span class="identifier">ForwardIterator1</span> <span class="identifier">first1</span><span class="special">,</span> <span class="identifier">ForwardIterator1</span> <span class="identifier">last1</span><span class="special">,</span> <span class="identifier">ForwardIterator2</span> <span class="identifier">first2</span><span class="special">,</span> <span class="identifier">ForwardIterator2</span> <span class="identifier">last2</span> <span class="special">);</span>
999 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">ForwardIterator1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ForwardIterator2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BinaryPredicate</span> <span class="special">></span>
1000 <span class="keyword">bool</span> <span class="identifier">is_permutation</span> <span class="special">(</span> <span class="identifier">ForwardIterator1</span> <span class="identifier">first1</span><span class="special">,</span> <span class="identifier">ForwardIterator1</span> <span class="identifier">last1</span><span class="special">,</span>
1001 <span class="identifier">ForwardIterator2</span> <span class="identifier">first2</span><span class="special">,</span> <span class="identifier">ForwardIterator2</span> <span class="identifier">last2</span><span class="special">,</span>
1002 <span class="identifier">BinaryPredicate</span> <span class="identifier">p</span> <span class="special">);</span>
1004 <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">ForwardIterator</span><span class="special">></span>
1005 <span class="keyword">bool</span> <span class="identifier">is_permutation</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">ForwardIterator</span> <span class="identifier">first2</span> <span class="special">);</span>
1007 <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">ForwardIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BinaryPredicate</span><span class="special">></span>
1008 <span class="keyword">bool</span> <span class="identifier">is_permutation</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">ForwardIterator</span> <span class="identifier">first2</span><span class="special">,</span> <span class="identifier">BinaryPredicate</span> <span class="identifier">pred</span> <span class="special">);</span>
1013 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.h1"></a>
1014 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.examples"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.examples">Examples</a>
1017 Given the container <code class="computeroutput"><span class="identifier">c1</span></code>
1018 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>
1019 <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>,
1020 and <code class="computeroutput"><span class="identifier">c2</span></code> containing <code class="computeroutput"><span class="special">{</span> <span class="number">15</span><span class="special">,</span>
1021 <span class="number">14</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">2</span> <span class="special">}</span></code>,
1024 <pre class="programlisting"><span class="identifier">is_permutation</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="identifier">c2</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c2</span><span class="special">.</span><span class="identifier">end</span> <span class="special">())</span> <span class="special">--></span> <span class="keyword">false</span>
1025 <span class="identifier">is_permutation</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="special">+</span> <span class="number">1</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="identifier">c2</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c2</span><span class="special">.</span><span class="identifier">end</span> <span class="special">())</span> <span class="special">--></span> <span class="keyword">true</span>
1027 <span class="identifier">is_permutation</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="identifier">c1</span><span class="special">.</span><span class="identifier">end</span> <span class="special">(),</span> <span class="identifier">c2</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">c2</span><span class="special">.</span><span class="identifier">end</span> <span class="special">())</span> <span class="special">--></span> <span class="keyword">true</span> <span class="comment">// all empty ranges are permutations of each other</span>
1032 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.h2"></a>
1033 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.iterator_requirements"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.iterator_requirements">Iterator
1037 <code class="computeroutput"><span class="identifier">is_permutation</span></code> works on
1038 forward iterators or better.
1041 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.h3"></a>
1042 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.complexity"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.complexity">Complexity</a>
1045 All of the variants of <code class="computeroutput"><span class="identifier">is_permutation</span></code>
1046 run in <span class="emphasis"><em>O(N^2)</em></span> (quadratic) time; that is, they compare
1047 against each element in the list (potentially) N times. If passed random-access
1048 iterators, <code class="computeroutput"><span class="identifier">is_permutation</span></code>
1049 can return quickly if the sequences are different sizes.
1052 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.h4"></a>
1053 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.exception_safety"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.exception_safety">Exception
1057 All of the variants of <code class="computeroutput"><span class="identifier">is_permutation</span></code>
1058 take their parameters by value, and do not depend upon any global state.
1059 Therefore, all the routines in this file provide the strong exception guarantee.
1062 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.h5"></a>
1063 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.notes"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.is_permutation.notes">Notes</a>
1065 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1066 <li class="listitem">
1067 The three iterator versions of the routine <code class="computeroutput"><span class="identifier">is_permutation</span></code>
1068 are also available as part of the C++11 standard.
1070 <li class="listitem">
1071 The four iterator versions of the routine <code class="computeroutput"><span class="identifier">is_permutation</span></code>
1072 are part of the proposed C++14 standard. When C++14 standard libraries
1073 become available, the implementation should be changed to use the implementation
1074 from the standard library (if available).
1076 <li class="listitem">
1077 <code class="computeroutput"><span class="identifier">is_permutation</span></code> returns
1078 true when passed a pair of empty ranges, no matter what predicate is
1079 passed to test with.
1083 <div class="section">
1084 <div class="titlepage"><div><div><h4 class="title">
1085 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point"></a><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point" title="partition_point">partition_point
1087 </h4></div></div></div>
1089 The header file 'partition_point.hpp' contains two variants of a single
1090 algorithm, <code class="computeroutput"><span class="identifier">partition_point</span></code>.
1091 Given a partitioned sequence and a predicate, the algorithm finds the partition
1092 point; i.e, the first element in the sequence that does not satisfy the
1096 The routine <code class="computeroutput"><span class="identifier">partition_point</span></code>
1097 takes a partitioned sequence and a predicate. It returns an iterator which
1098 'points to' the first element in the sequence that does not satisfy the
1099 predicate. If all the items in the sequence satisfy the predicate, then
1100 it returns one past the final element in the sequence.
1103 <code class="computeroutput"><span class="identifier">partition_point</span></code> come in
1104 two forms; the first one takes two iterators to define the range. The second
1105 form takes a single range parameter, and uses Boost.Range to traverse it.
1108 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.h0"></a>
1109 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.interface"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.interface">interface</a>
1112 There are two versions; one takes two iterators, and the other takes a
1117 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ForwardIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">></span>
1118 <span class="identifier">ForwardIterator</span> <span class="identifier">partition_point</span> <span class="special">(</span> <span class="identifier">ForwardIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">ForwardIterator</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">p</span> <span class="special">);</span>
1119 <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>
1120 <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">partition_point</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>
1125 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.h1"></a>
1126 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.examples"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.examples">Examples</a>
1129 Given the container <code class="computeroutput"><span class="identifier">c</span></code> containing
1130 <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>
1131 <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>,
1134 <pre class="programlisting"><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>
1135 <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>
1137 <span class="identifier">partition_point</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">c</span><span class="special">.</span><span class="identifier">begin</span> <span class="special">()</span> <span class="special">+</span> <span class="number">4</span> <span class="special">(</span><span class="identifier">pointing</span> <span class="identifier">at</span> <span class="number">14</span><span class="special">)</span>
1138 <span class="identifier">partition_point</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">c</span><span class="special">.</span><span class="identifier">begin</span> <span class="special">()</span> <span class="special">+</span> <span class="number">4</span> <span class="special">(</span><span class="identifier">pointing</span> <span class="identifier">at</span> <span class="number">14</span><span class="special">)</span>
1139 <span class="identifier">partition_point</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">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">end</span><span class="special">)</span>
1140 <span class="identifier">partition_point</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">c</span><span class="special">.</span><span class="identifier">end</span> <span class="special">()</span> <span class="comment">// empty range</span>
1145 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.h2"></a>
1146 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.iterator_requirements"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.iterator_requirements">Iterator
1150 <code class="computeroutput"><span class="identifier">partition_point</span></code> requires
1151 forward iterators or better; it will not work on input iterators or output
1155 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.h3"></a>
1156 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.complexity"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.complexity">Complexity</a>
1159 Both of the variants of <code class="computeroutput"><span class="identifier">partition_point</span></code>
1160 run in <span class="emphasis"><em>O( log (N))</em></span> (logarithmic) time; that is, the
1161 predicate will be will be applied approximately <span class="emphasis"><em>log(N)</em></span>
1162 times. To do this, however, the algorithm needs to know the size of the
1163 sequence. For forward and bidirectional iterators, calculating the size
1164 of the sequence is an <span class="emphasis"><em>O(N)</em></span> operation.
1167 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.h4"></a>
1168 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.exception_safety"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.exception_safety">Exception
1172 Both of the variants of <code class="computeroutput"><span class="identifier">partition_point</span></code>
1173 take their parameters by value or const reference, and do not depend upon
1174 any global state. Therefore, all the routines in this file provide the
1175 strong exception guarantee.
1178 <a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.h5"></a>
1179 <span class="phrase"><a name="the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.notes"></a></span><a class="link" href="CXX11.html#the_boost_algorithm_library.CXX11.CXX11_inner_algorithms.partition_point.notes">Notes</a>
1181 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1182 <li class="listitem">
1183 The iterator-based version of the routine <code class="computeroutput"><span class="identifier">partition_point</span></code>
1184 is also available as part of the C++11 standard.
1186 <li class="listitem">
1187 For empty ranges, the partition point is the end of the range.
1191 <div class="section">
1192 <div class="titlepage"><div><div><h4 class="title">
1193 <a name="algorithm.CXX11.CXX11_inner_algorithms.partition_copy"></a><a class="link" href="CXX11.html#algorithm.CXX11.CXX11_inner_algorithms.partition_copy" title="partition_copy">partition_copy
1195 </h4></div></div></div>
1197 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/cxx11/partition_copy_hpp.html" title="Header <boost/algorithm/cxx11/partition_copy.hpp>">partition_copy</a>
1198 </code> </strong></span> Copy a subset of a sequence to a new sequence
1201 <div class="section">
1202 <div class="titlepage"><div><div><h4 class="title">
1203 <a name="algorithm.CXX11.CXX11_inner_algorithms.copy_if"></a><a class="link" href="CXX11.html#algorithm.CXX11.CXX11_inner_algorithms.copy_if" title="copy_if">copy_if
1205 </h4></div></div></div>
1207 <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_if</a>
1208 </code> </strong></span> Copy a subset of a sequence to a new sequence
1211 <div class="section">
1212 <div class="titlepage"><div><div><h4 class="title">
1213 <a name="algorithm.CXX11.CXX11_inner_algorithms.copy_n"></a><a class="link" href="CXX11.html#algorithm.CXX11.CXX11_inner_algorithms.copy_n" title="copy_n">copy_n
1215 </h4></div></div></div>
1217 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/cxx11/copy_n_hpp.html" title="Header <boost/algorithm/cxx11/copy_n.hpp>">copy_n</a>
1218 </code> </strong></span> Copy n items from one sequence to another
1221 <div class="section">
1222 <div class="titlepage"><div><div><h4 class="title">
1223 <a name="algorithm.CXX11.CXX11_inner_algorithms.iota"></a><a class="link" href="CXX11.html#algorithm.CXX11.CXX11_inner_algorithms.iota" title="iota">iota
1225 </h4></div></div></div>
1227 <span class="bold"><strong><code class="literal"><a class="link" href="../header/boost/algorithm/cxx11/iota_hpp.html" title="Header <boost/algorithm/cxx11/iota.hpp>">iota</a>
1228 </code> </strong></span> Generate an increasing series
1233 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
1234 <td align="left"></td>
1235 <td align="right"><div class="copyright-footer">Copyright © 2010-2012 Marshall Clow<p>
1236 Distributed under the Boost Software License, Version 1.0. (See accompanying
1237 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>)
1242 <div class="spirit-nav">
1243 <a accesskey="p" href="../the_boost_algorithm_library/Searching/KnuthMorrisPratt.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="CXX14.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>