• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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">&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="special">&gt;</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">&lt;</span><span class="identifier">Function</span><span class="special">,</span> <span class="keyword">int</span><span class="special">*&gt;</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">&lt;</span><span class="keyword">int</span><span class="special">&gt;(),</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">&lt;</span><span class="keyword">int</span><span class="special">&gt;(),</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">&lt;&lt;</span> <span class="string">"multiplying the array by 2:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="special">*</span><span class="identifier">i</span><span class="special">++</span> <span class="special">&lt;&lt;</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">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"adding 4 to each element in the array:"</span> <span class="special">&lt;&lt;</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">&lt;</span><span class="keyword">int</span><span class="special">&gt;(),</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">&lt;</span><span class="keyword">int</span><span class="special">&gt;(),</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">&lt;</span><span class="keyword">int</span><span class="special">&gt;(</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">&lt;&lt;</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">&lt;</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">&gt;</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">&lt;</span><span class="identifier">Iterator</span><span class="special">&gt;::</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">&amp;</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">&lt;</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">&gt;</span>
99  <span class="identifier">transform_iterator</span><span class="special">(</span>
100        <span class="identifier">transform_iterator</span><span class="special">&lt;</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">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</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">&lt;</span><span class="identifier">I2</span><span class="special">,</span> <span class="identifier">Iterator</span><span class="special">&gt;::</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">&lt;</span><span class="identifier">F2</span><span class="special">,</span> <span class="identifier">UnaryFunction</span><span class="special">&gt;::</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">&amp;</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">&amp;</span> <span class="keyword">operator</span><span class="special">++();</span>
108  <span class="identifier">transform_iterator</span><span class="special">&amp;</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">&lt;</span><span class="keyword">const</span> <span class="identifier">UnaryFunction</span><span class="special">(</span><span class="identifier">iterator_traits</span><span class="special">&lt;</span><span class="identifier">Iterator</span><span class="special">&gt;::</span><span class="identifier">reference</span><span class="special">)&gt;::</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">&lt;</span><span class="identifier">remove_reference</span><span class="special">&lt;</span><span class="identifier">reference</span><span class="special">&gt;</span>
124        <span class="special">&gt;::</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">&lt;</span><span class="keyword">const</span> <span class="identifier">UnaryFunction</span><span class="special">(</span><span class="identifier">iterator_traits</span><span class="special">&lt;</span><span class="identifier">Iterator</span><span class="special">&gt;::</span><span class="identifier">reference</span><span class="special">)&gt;::</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">&lt;</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">&gt;</span></code>
268        is interoperable with <code class="computeroutput"><span class="identifier">transform_iterator</span><span class="special">&lt;</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">&gt;</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">&amp;</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">&lt;</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">&gt;</span>
298<span class="identifier">transform_iterator</span><span class="special">(</span>
299      <span class="identifier">transform_iterator</span><span class="special">&lt;</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">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</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">&lt;</span><span class="identifier">I2</span><span class="special">,</span> <span class="identifier">Iterator</span><span class="special">&gt;::</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">&lt;</span><span class="identifier">F2</span><span class="special">,</span> <span class="identifier">UnaryFunction</span><span class="special">&gt;::</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">&amp;</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">&amp;</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">&amp;</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 &lt;ulink url="http://www.boost.org/LICENSE_1_0.txt"&gt;
347        http://www.boost.org/LICENSE_1_0.txt &lt;/ulink&gt;)
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