1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Transform Iterator</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="Chapter 1. Boost.Iterator"> 8<link rel="up" href="../specialized.html" title="Specialized Adaptors"> 9<link rel="prev" href="shared_container.html" title="Shared Container Iterator"> 10<link rel="next" href="zip.html" title="Zip Iterator"> 11</head> 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> 20</tr></table> 21<hr> 22<div class="spirit-nav"> 23<a accesskey="p" href="shared_container.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../specialized.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="zip.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h3 class="title"> 27<a name="iterator.specialized.transform"></a><a class="link" href="transform.html" title="Transform Iterator">Transform Iterator</a> 28</h3></div></div></div> 29<p> 30 The transform iterator adapts an iterator by modifying the <code class="computeroutput"><span class="keyword">operator</span><span class="special">*</span></code> 31 to apply a function object to the result of dereferencing the iterator and 32 returning the result. 33 </p> 34<h3> 35<a name="iterator.specialized.transform.h0"></a> 36 <span class="phrase"><a name="iterator.specialized.transform.example"></a></span><a class="link" href="transform.html#iterator.specialized.transform.example">Example</a> 37 </h3> 38<p> 39 This is a simple example of using the transform_iterators class to generate 40 iterators that multiply (or add to) the value returned by dereferencing the 41 iterator. It would be cooler to use lambda library in this example. 42 </p> 43<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">x</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">6</span><span class="special">,</span> <span class="number">7</span><span class="special">,</span> <span class="number">8</span> <span class="special">};</span> 44<span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">N</span> <span class="special">=</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">x</span><span class="special">)/</span><span class="keyword">sizeof</span><span class="special">(</span><span class="keyword">int</span><span class="special">);</span> 45 46<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">binder1st</span><span class="special"><</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="special">></span> <span class="identifier">Function</span><span class="special">;</span> 47<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">transform_iterator</span><span class="special"><</span><span class="identifier">Function</span><span class="special">,</span> <span class="keyword">int</span><span class="special">*></span> <span class="identifier">doubling_iterator</span><span class="special">;</span> 48 49<span class="identifier">doubling_iterator</span> <span class="identifier">i</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind1st</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><span class="keyword">int</span><span class="special">>(),</span> <span class="number">2</span><span class="special">)),</span> 50 <span class="identifier">i_end</span><span class="special">(</span><span class="identifier">x</span> <span class="special">+</span> <span class="identifier">N</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind1st</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><span class="keyword">int</span><span class="special">>(),</span> <span class="number">2</span><span class="special">));</span> 51 52<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"multiplying the array by 2:"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 53<span class="keyword">while</span> <span class="special">(</span><span class="identifier">i</span> <span class="special">!=</span> <span class="identifier">i_end</span><span class="special">)</span> 54 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="special">*</span><span class="identifier">i</span><span class="special">++</span> <span class="special"><<</span> <span class="string">" "</span><span class="special">;</span> 55<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 56 57<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"adding 4 to each element in the array:"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 58<span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_transform_iterator</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind1st</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">plus</span><span class="special"><</span><span class="keyword">int</span><span class="special">>(),</span> <span class="number">4</span><span class="special">)),</span> 59 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_transform_iterator</span><span class="special">(</span><span class="identifier">x</span> <span class="special">+</span> <span class="identifier">N</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind1st</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">plus</span><span class="special"><</span><span class="keyword">int</span><span class="special">>(),</span> <span class="number">4</span><span class="special">)),</span> 60 <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream_iterator</span><span class="special"><</span><span class="keyword">int</span><span class="special">>(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">,</span> <span class="string">" "</span><span class="special">));</span> 61<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 62</pre> 63<p> 64 The output is: 65 </p> 66<pre class="programlisting">multiplying the array by 2: 672 4 6 8 10 12 14 16 68adding 4 to each element in the array: 695 6 7 8 9 10 11 12 70</pre> 71<p> 72 The source code for this example can be found <a href="../../../../example/transform_iterator_example.cpp" target="_top">here</a>. 73 </p> 74<h3> 75<a name="iterator.specialized.transform.h1"></a> 76 <span class="phrase"><a name="iterator.specialized.transform.reference"></a></span><a class="link" href="transform.html#iterator.specialized.transform.reference">Reference</a> 77 </h3> 78<h4> 79<a name="iterator.specialized.transform.h2"></a> 80 <span class="phrase"><a name="iterator.specialized.transform.synopsis"></a></span><a class="link" href="transform.html#iterator.specialized.transform.synopsis">Synopsis</a> 81 </h4> 82<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">UnaryFunction</span><span class="special">,</span> 83 <span class="keyword">class</span> <span class="identifier">Iterator</span><span class="special">,</span> 84 <span class="keyword">class</span> <span class="identifier">Reference</span> <span class="special">=</span> <span class="identifier">use_default</span><span class="special">,</span> 85 <span class="keyword">class</span> <span class="identifier">Value</span> <span class="special">=</span> <span class="identifier">use_default</span><span class="special">></span> 86<span class="keyword">class</span> <span class="identifier">transform_iterator</span> 87<span class="special">{</span> 88<span class="keyword">public</span><span class="special">:</span> 89 <span class="keyword">typedef</span> <span class="comment">/* see below */</span> <span class="identifier">value_type</span><span class="special">;</span> 90 <span class="keyword">typedef</span> <span class="comment">/* see below */</span> <span class="identifier">reference</span><span class="special">;</span> 91 <span class="keyword">typedef</span> <span class="comment">/* see below */</span> <span class="identifier">pointer</span><span class="special">;</span> 92 <span class="keyword">typedef</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">Iterator</span><span class="special">>::</span><span class="identifier">difference_type</span> <span class="identifier">difference_type</span><span class="special">;</span> 93 <span class="keyword">typedef</span> <span class="comment">/* see below */</span> <span class="identifier">iterator_category</span><span class="special">;</span> 94 95 <span class="identifier">transform_iterator</span><span class="special">();</span> 96 <span class="identifier">transform_iterator</span><span class="special">(</span><span class="identifier">Iterator</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">UnaryFunction</span> <span class="identifier">f</span><span class="special">);</span> 97 98 <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">I2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">V2</span><span class="special">></span> 99 <span class="identifier">transform_iterator</span><span class="special">(</span> 100 <span class="identifier">transform_iterator</span><span class="special"><</span><span class="identifier">F2</span><span class="special">,</span> <span class="identifier">I2</span><span class="special">,</span> <span class="identifier">R2</span><span class="special">,</span> <span class="identifier">V2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">t</span> 101 <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">enable_if_convertible</span><span class="special"><</span><span class="identifier">I2</span><span class="special">,</span> <span class="identifier">Iterator</span><span class="special">>::</span><span class="identifier">type</span><span class="special">*</span> <span class="special">=</span> <span class="number">0</span> <span class="comment">// exposition only</span> 102 <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">enable_if_convertible</span><span class="special"><</span><span class="identifier">F2</span><span class="special">,</span> <span class="identifier">UnaryFunction</span><span class="special">>::</span><span class="identifier">type</span><span class="special">*</span> <span class="special">=</span> <span class="number">0</span> <span class="comment">// exposition only</span> 103 <span class="special">);</span> 104 <span class="identifier">UnaryFunction</span> <span class="identifier">functor</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> 105 <span class="identifier">Iterator</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">base</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> 106 <span class="identifier">reference</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span> 107 <span class="identifier">transform_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span> 108 <span class="identifier">transform_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">--();</span> 109<span class="keyword">private</span><span class="special">:</span> 110 <span class="identifier">Iterator</span> <span class="identifier">m_iterator</span><span class="special">;</span> <span class="comment">// exposition only</span> 111 <span class="identifier">UnaryFunction</span> <span class="identifier">m_f</span><span class="special">;</span> <span class="comment">// exposition only</span> 112<span class="special">};</span> 113</pre> 114<p> 115 If <code class="computeroutput"><span class="identifier">Reference</span></code> is <code class="computeroutput"><span class="identifier">use_default</span></code> then the <code class="computeroutput"><span class="identifier">reference</span></code> 116 member of <code class="computeroutput"><span class="identifier">transform_iterator</span></code> 117 is<br> <code class="computeroutput"><span class="identifier">result_of</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">UnaryFunction</span><span class="special">(</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">Iterator</span><span class="special">>::</span><span class="identifier">reference</span><span class="special">)>::</span><span class="identifier">type</span></code>. 118 Otherwise, <code class="computeroutput"><span class="identifier">reference</span></code> is 119 <code class="computeroutput"><span class="identifier">Reference</span></code>. 120 </p> 121<p> 122 If <code class="computeroutput"><span class="identifier">Value</span></code> is <code class="computeroutput"><span class="identifier">use_default</span></code> then the <code class="computeroutput"><span class="identifier">value_type</span></code> 123 member is <code class="computeroutput"><span class="identifier">remove_cv</span><span class="special"><</span><span class="identifier">remove_reference</span><span class="special"><</span><span class="identifier">reference</span><span class="special">></span> 124 <span class="special">>::</span><span class="identifier">type</span></code>. 125 Otherwise, <code class="computeroutput"><span class="identifier">value_type</span></code> is 126 <code class="computeroutput"><span class="identifier">Value</span></code>. 127 </p> 128<p> 129 If <code class="computeroutput"><span class="identifier">Iterator</span></code> models Readable 130 Lvalue Iterator and if <code class="computeroutput"><span class="identifier">Iterator</span></code> 131 models Random Access Traversal Iterator, then <code class="computeroutput"><span class="identifier">iterator_category</span></code> 132 is convertible to <code class="computeroutput"><span class="identifier">random_access_iterator_tag</span></code>. 133 Otherwise, if <code class="computeroutput"><span class="identifier">Iterator</span></code> models 134 Bidirectional Traversal Iterator, then <code class="computeroutput"><span class="identifier">iterator_category</span></code> 135 is convertible to <code class="computeroutput"><span class="identifier">bidirectional_iterator_tag</span></code>. 136 Otherwise <code class="computeroutput"><span class="identifier">iterator_category</span></code> 137 is convertible to <code class="computeroutput"><span class="identifier">forward_iterator_tag</span></code>. 138 If <code class="computeroutput"><span class="identifier">Iterator</span></code> does not model 139 Readable Lvalue Iterator then <code class="computeroutput"><span class="identifier">iterator_category</span></code> 140 is convertible to <code class="computeroutput"><span class="identifier">input_iterator_tag</span></code>. 141 </p> 142<h4> 143<a name="iterator.specialized.transform.h3"></a> 144 <span class="phrase"><a name="iterator.specialized.transform.requirements"></a></span><a class="link" href="transform.html#iterator.specialized.transform.requirements">Requirements</a> 145 </h4> 146<p> 147 The type <code class="computeroutput"><span class="identifier">UnaryFunction</span></code> must 148 be Assignable, Copy Constructible, and the expression <code class="computeroutput"><span class="identifier">f</span><span class="special">(*</span><span class="identifier">i</span><span class="special">)</span></code> 149 must be valid where <code class="computeroutput"><span class="identifier">f</span></code> is 150 a const object of type <code class="computeroutput"><span class="identifier">UnaryFunction</span></code>, 151 <code class="computeroutput"><span class="identifier">i</span></code> is an object of type <code class="computeroutput"><span class="identifier">Iterator</span></code>, and where the type of <code class="computeroutput"><span class="identifier">f</span><span class="special">(*</span><span class="identifier">i</span><span class="special">)</span></code> must be <code class="computeroutput"><span class="identifier">result_of</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">UnaryFunction</span><span class="special">(</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">Iterator</span><span class="special">>::</span><span class="identifier">reference</span><span class="special">)>::</span><span class="identifier">type</span></code>. 152 </p> 153<p> 154 The argument <code class="computeroutput"><span class="identifier">Iterator</span></code> shall 155 model Readable Iterator. 156 </p> 157<h4> 158<a name="iterator.specialized.transform.h4"></a> 159 <span class="phrase"><a name="iterator.specialized.transform.concepts"></a></span><a class="link" href="transform.html#iterator.specialized.transform.concepts">Concepts</a> 160 </h4> 161<p> 162 The resulting <code class="computeroutput"><span class="identifier">transform_iterator</span></code> 163 models the most refined of the following that is also modeled by <code class="computeroutput"><span class="identifier">Iterator</span></code>. 164 </p> 165<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 166<li class="listitem"> 167 Writable Lvalue Iterator if <code class="computeroutput"><span class="identifier">transform_iterator</span><span class="special">::</span><span class="identifier">reference</span></code> 168 is a non-const reference. 169 </li> 170<li class="listitem"> 171 Readable Lvalue Iterator if <code class="computeroutput"><span class="identifier">transform_iterator</span><span class="special">::</span><span class="identifier">reference</span></code> 172 is a const reference. 173 </li> 174<li class="listitem"> 175 Readable Iterator otherwise. 176 </li> 177</ul></div> 178<p> 179 The <code class="computeroutput"><span class="identifier">transform_iterator</span></code> models 180 the most refined standard traversal concept that is modeled by the <code class="computeroutput"><span class="identifier">Iterator</span></code> argument. 181 </p> 182<p> 183 If <code class="computeroutput"><span class="identifier">transform_iterator</span></code> is 184 a model of Readable Lvalue Iterator then it models the following original 185 iterator concepts depending on what the <code class="computeroutput"><span class="identifier">Iterator</span></code> 186 argument models. 187 </p> 188<div class="table"> 189<a name="iterator.specialized.transform.category"></a><p class="title"><b>Table 1.17. Category</b></p> 190<div class="table-contents"><table class="table" summary="Category"> 191<colgroup> 192<col> 193<col> 194</colgroup> 195<thead><tr> 196<th> 197 <p> 198 If <code class="computeroutput"><span class="identifier">Iterator</span></code> models 199 </p> 200 </th> 201<th> 202 <p> 203 then <code class="computeroutput"><span class="identifier">transform_iterator</span></code> 204 models 205 </p> 206 </th> 207</tr></thead> 208<tbody> 209<tr> 210<td> 211 <p> 212 Single Pass Iterator 213 </p> 214 </td> 215<td> 216 <p> 217 Input Iterator 218 </p> 219 </td> 220</tr> 221<tr> 222<td> 223 <p> 224 Forward Traversal Iterator 225 </p> 226 </td> 227<td> 228 <p> 229 Forward Iterator 230 </p> 231 </td> 232</tr> 233<tr> 234<td> 235 <p> 236 Bidirectional Traversal Iterator 237 </p> 238 </td> 239<td> 240 <p> 241 Bidirectional Iterator 242 </p> 243 </td> 244</tr> 245<tr> 246<td> 247 <p> 248 Random Access Traversal Iterator 249 </p> 250 </td> 251<td> 252 <p> 253 Random Access Iterator 254 </p> 255 </td> 256</tr> 257</tbody> 258</table></div> 259</div> 260<br class="table-break"><p> 261 If <code class="computeroutput"><span class="identifier">transform_iterator</span></code> models 262 Writable Lvalue Iterator then it is a mutable iterator (as defined in the 263 old iterator requirements). 264 </p> 265<p> 266 <code class="computeroutput"><span class="identifier">transform_iterator</span><span class="special"><</span><span class="identifier">F1</span><span class="special">,</span> <span class="identifier">X</span><span class="special">,</span> <span class="identifier">R1</span><span class="special">,</span> 267 <span class="identifier">V1</span><span class="special">></span></code> 268 is interoperable with <code class="computeroutput"><span class="identifier">transform_iterator</span><span class="special"><</span><span class="identifier">F2</span><span class="special">,</span> <span class="identifier">Y</span><span class="special">,</span> 269 <span class="identifier">R2</span><span class="special">,</span> <span class="identifier">V2</span><span class="special">></span></code> 270 if and only if <code class="computeroutput"><span class="identifier">X</span></code> is interoperable 271 with <code class="computeroutput"><span class="identifier">Y</span></code>. 272 </p> 273<h4> 274<a name="iterator.specialized.transform.h5"></a> 275 <span class="phrase"><a name="iterator.specialized.transform.operations"></a></span><a class="link" href="transform.html#iterator.specialized.transform.operations">Operations</a> 276 </h4> 277<p> 278 In addition to the operations required by the <a class="link" href="transform.html#iterator.specialized.transform.concepts">concepts</a> 279 modeled by <code class="computeroutput"><span class="identifier">transform_iterator</span></code>, 280 <code class="computeroutput"><span class="identifier">transform_iterator</span></code> provides 281 the following operations: 282 </p> 283<pre class="programlisting"><span class="identifier">transform_iterator</span><span class="special">();</span> 284</pre> 285<p> 286 <span class="bold"><strong>Returns: </strong></span> An instance of <code class="computeroutput"><span class="identifier">transform_iterator</span></code> 287 with <code class="computeroutput"><span class="identifier">m_f</span></code> and <code class="computeroutput"><span class="identifier">m_iterator</span></code> default constructed. 288 </p> 289<pre class="programlisting"><span class="identifier">transform_iterator</span><span class="special">(</span><span class="identifier">Iterator</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">UnaryFunction</span> <span class="identifier">f</span><span class="special">);</span> 290</pre> 291<p> 292 <span class="bold"><strong>Returns: </strong></span> An instance of <code class="computeroutput"><span class="identifier">transform_iterator</span></code> 293 with <code class="computeroutput"><span class="identifier">m_f</span></code> initialized to 294 <code class="computeroutput"><span class="identifier">f</span></code> and <code class="computeroutput"><span class="identifier">m_iterator</span></code> 295 initialized to <code class="computeroutput"><span class="identifier">x</span></code>. 296 </p> 297<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">I2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">V2</span><span class="special">></span> 298<span class="identifier">transform_iterator</span><span class="special">(</span> 299 <span class="identifier">transform_iterator</span><span class="special"><</span><span class="identifier">F2</span><span class="special">,</span> <span class="identifier">I2</span><span class="special">,</span> <span class="identifier">R2</span><span class="special">,</span> <span class="identifier">V2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">t</span> 300 <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">enable_if_convertible</span><span class="special"><</span><span class="identifier">I2</span><span class="special">,</span> <span class="identifier">Iterator</span><span class="special">>::</span><span class="identifier">type</span><span class="special">*</span> <span class="special">=</span> <span class="number">0</span> <span class="comment">// exposition only</span> 301 <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">enable_if_convertible</span><span class="special"><</span><span class="identifier">F2</span><span class="special">,</span> <span class="identifier">UnaryFunction</span><span class="special">>::</span><span class="identifier">type</span><span class="special">*</span> <span class="special">=</span> <span class="number">0</span> <span class="comment">// exposition only</span> 302<span class="special">);</span> 303</pre> 304<p> 305 <span class="bold"><strong>Returns: </strong></span> An instance of <code class="computeroutput"><span class="identifier">transform_iterator</span></code> 306 with <code class="computeroutput"><span class="identifier">m_f</span></code> initialized to 307 <code class="computeroutput"><span class="identifier">t</span><span class="special">.</span><span class="identifier">functor</span><span class="special">()</span></code> 308 and <code class="computeroutput"><span class="identifier">m_iterator</span></code> initialized 309 to <code class="computeroutput"><span class="identifier">t</span><span class="special">.</span><span class="identifier">base</span><span class="special">()</span></code>.<br> 310 <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="identifier">OtherIterator</span></code> 311 is implicitly convertible to <code class="computeroutput"><span class="identifier">Iterator</span></code>. 312 </p> 313<pre class="programlisting"><span class="identifier">UnaryFunction</span> <span class="identifier">functor</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> 314</pre> 315<p> 316 <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="identifier">m_f</span></code> 317 </p> 318<pre class="programlisting"><span class="identifier">Iterator</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">base</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> 319</pre> 320<p> 321 <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="identifier">m_iterator</span></code> 322 </p> 323<pre class="programlisting"><span class="identifier">reference</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span> 324</pre> 325<p> 326 <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="identifier">m_f</span><span class="special">(*</span><span class="identifier">m_iterator</span><span class="special">)</span></code> 327 </p> 328<pre class="programlisting"><span class="identifier">transform_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span> 329</pre> 330<p> 331 <span class="bold"><strong>Effects: </strong></span> <code class="computeroutput"><span class="special">++</span><span class="identifier">m_iterator</span></code><br> <span class="bold"><strong>Returns: 332 </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 333 </p> 334<pre class="programlisting"><span class="identifier">transform_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">--();</span> 335</pre> 336<p> 337 <span class="bold"><strong>Effects: </strong></span> <code class="computeroutput"><span class="special">--</span><span class="identifier">m_iterator</span></code><br> <span class="bold"><strong>Returns: 338 </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 339 </p> 340</div> 341<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 342<td align="left"></td> 343<td align="right"><div class="copyright-footer">Copyright © 2003, 2005 David Abrahams Jeremy Siek Thomas 344 Witt<p> 345 Distributed under the Boost Software License, Version 1.0. (See accompanying 346 file LICENSE_1_0.txt or copy at <ulink url="http://www.boost.org/LICENSE_1_0.txt"> 347 http://www.boost.org/LICENSE_1_0.txt </ulink>) 348 </p> 349</div></td> 350</tr></table> 351<hr> 352<div class="spirit-nav"> 353<a accesskey="p" href="shared_container.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../specialized.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="zip.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> 354</div> 355</body> 356</html> 357