• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>Function Output 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="filter.html" title="Filter Iterator">
10<link rel="next" href="indirect.html" title="Indirect 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="filter.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="indirect.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.function_output"></a><a class="link" href="function_output.html" title="Function Output Iterator">Function Output
28      Iterator</a>
29</h3></div></div></div>
30<p>
31        The function output iterator adaptor makes it easier to create custom output
32        iterators. The adaptor takes a unary function and creates a model of Output
33        Iterator. Each item assigned to the output iterator is passed as an argument
34        to the unary function. The motivation for this iterator is that creating
35        a conforming output iterator is non-trivial, particularly because the proper
36        implementation usually requires a proxy object.
37      </p>
38<h3>
39<a name="iterator.specialized.function_output.h0"></a>
40        <span class="phrase"><a name="iterator.specialized.function_output.example"></a></span><a class="link" href="function_output.html#iterator.specialized.function_output.example">Example</a>
41      </h3>
42<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">string_appender</span>
43<span class="special">{</span>
44    <span class="identifier">string_appender</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&amp;</span> <span class="identifier">s</span><span class="special">)</span>
45        <span class="special">:</span> <span class="identifier">m_str</span><span class="special">(&amp;</span><span class="identifier">s</span><span class="special">)</span>
46    <span class="special">{}</span>
47
48    <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">const</span>
49    <span class="special">{</span>
50        <span class="special">*</span><span class="identifier">m_str</span> <span class="special">+=</span> <span class="identifier">x</span><span class="special">;</span>
51    <span class="special">}</span>
52
53    <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">*</span> <span class="identifier">m_str</span><span class="special">;</span>
54<span class="special">};</span>
55
56<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">*[])</span>
57<span class="special">{</span>
58  <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;</span> <span class="identifier">x</span><span class="special">;</span>
59  <span class="identifier">x</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="string">"hello"</span><span class="special">);</span>
60  <span class="identifier">x</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="string">" "</span><span class="special">);</span>
61  <span class="identifier">x</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="string">"world"</span><span class="special">);</span>
62  <span class="identifier">x</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="string">"!"</span><span class="special">);</span>
63
64  <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span> <span class="special">=</span> <span class="string">""</span><span class="special">;</span>
65  <span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</span><span class="special">(</span><span class="identifier">x</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span>
66      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_function_output_iterator</span><span class="special">(</span><span class="identifier">string_appender</span><span class="special">(</span><span class="identifier">s</span><span class="special">)));</span>
67
68  <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">s</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>
69
70  <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
71<span class="special">}</span>
72</pre>
73<h3>
74<a name="iterator.specialized.function_output.h1"></a>
75        <span class="phrase"><a name="iterator.specialized.function_output.reference"></a></span><a class="link" href="function_output.html#iterator.specialized.function_output.reference">Reference</a>
76      </h3>
77<h4>
78<a name="iterator.specialized.function_output.h2"></a>
79        <span class="phrase"><a name="iterator.specialized.function_output.synopsis"></a></span><a class="link" href="function_output.html#iterator.specialized.function_output.synopsis">Synopsis</a>
80      </h4>
81<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">&gt;</span>
82<span class="keyword">class</span> <span class="identifier">function_output_iterator</span> <span class="special">{</span>
83<span class="keyword">public</span><span class="special">:</span>
84  <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">output_iterator_tag</span> <span class="identifier">iterator_category</span><span class="special">;</span>
85  <span class="keyword">typedef</span> <span class="keyword">void</span>                     <span class="identifier">value_type</span><span class="special">;</span>
86  <span class="keyword">typedef</span> <span class="keyword">void</span>                     <span class="identifier">difference_type</span><span class="special">;</span>
87  <span class="keyword">typedef</span> <span class="keyword">void</span>                     <span class="identifier">pointer</span><span class="special">;</span>
88  <span class="keyword">typedef</span> <span class="keyword">void</span>                     <span class="identifier">reference</span><span class="special">;</span>
89
90  <span class="keyword">explicit</span> <span class="identifier">function_output_iterator</span><span class="special">();</span>
91
92  <span class="keyword">explicit</span> <span class="identifier">function_output_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">UnaryFunction</span><span class="special">&amp;</span> <span class="identifier">f</span><span class="special">);</span>
93
94  <span class="comment">/* see below */</span> <span class="keyword">operator</span><span class="special">*();</span>
95  <span class="identifier">function_output_iterator</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">++();</span>
96  <span class="identifier">function_output_iterator</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
97<span class="keyword">private</span><span class="special">:</span>
98  <span class="identifier">UnaryFunction</span> <span class="identifier">m_f</span><span class="special">;</span>     <span class="comment">// exposition only</span>
99<span class="special">};</span>
100</pre>
101<h4>
102<a name="iterator.specialized.function_output.h3"></a>
103        <span class="phrase"><a name="iterator.specialized.function_output.requirements"></a></span><a class="link" href="function_output.html#iterator.specialized.function_output.requirements">Requirements</a>
104      </h4>
105<p>
106        <code class="computeroutput"><span class="identifier">UnaryFunction</span></code> must be Assignable
107        and Copy Constructible.
108      </p>
109<h4>
110<a name="iterator.specialized.function_output.h4"></a>
111        <span class="phrase"><a name="iterator.specialized.function_output.concepts"></a></span><a class="link" href="function_output.html#iterator.specialized.function_output.concepts">Concepts</a>
112      </h4>
113<p>
114        <code class="computeroutput"><span class="identifier">function_output_iterator</span></code>
115        is a model of the Writable and Incrementable Iterator concepts.
116      </p>
117<h4>
118<a name="iterator.specialized.function_output.h5"></a>
119        <span class="phrase"><a name="iterator.specialized.function_output.operations"></a></span><a class="link" href="function_output.html#iterator.specialized.function_output.operations">Operations</a>
120      </h4>
121<pre class="programlisting"><span class="keyword">explicit</span> <span class="identifier">function_output_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">UnaryFunction</span><span class="special">&amp;</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">UnaryFunction</span><span class="special">());</span>
122</pre>
123<p>
124        <span class="bold"><strong>Effects: </strong></span> Constructs an instance of <code class="computeroutput"><span class="identifier">function_output_iterator</span></code> with <code class="computeroutput"><span class="identifier">m_f</span></code> constructed from <code class="computeroutput"><span class="identifier">f</span></code>.
125      </p>
126<pre class="programlisting"><span class="identifier">unspecified_type</span> <span class="keyword">operator</span><span class="special">*();</span>
127</pre>
128<p>
129        <span class="bold"><strong>Returns: </strong></span> An object <code class="computeroutput"><span class="identifier">r</span></code>
130        of unspecified type such that <code class="computeroutput"><span class="identifier">r</span>
131        <span class="special">=</span> <span class="identifier">t</span></code>
132        is equivalent to <code class="computeroutput"><span class="identifier">m_f</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span></code> for
133        all <code class="computeroutput"><span class="identifier">t</span></code>.
134      </p>
135<pre class="programlisting"><span class="identifier">function_output_iterator</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">++();</span>
136</pre>
137<p>
138        <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
139      </p>
140<pre class="programlisting"><span class="identifier">function_output_iterator</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
141</pre>
142<p>
143        <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
144      </p>
145</div>
146<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
147<td align="left"></td>
148<td align="right"><div class="copyright-footer">Copyright © 2003, 2005 David Abrahams Jeremy Siek Thomas
149      Witt<p>
150        Distributed under the Boost Software License, Version 1.0. (See accompanying
151        file LICENSE_1_0.txt or copy at &lt;ulink url="http://www.boost.org/LICENSE_1_0.txt"&gt;
152        http://www.boost.org/LICENSE_1_0.txt &lt;/ulink&gt;)
153      </p>
154</div></td>
155</tr></table>
156<hr>
157<div class="spirit-nav">
158<a accesskey="p" href="filter.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="indirect.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
159</div>
160</body>
161</html>
162