• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<head>
4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5<title>Tutorial: sequence_container_interface</title>
6<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css">
7<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
8<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
9<link rel="up" href="../stl_interfaces.html" title="Chapter 38. Boost.STLInterfaces">
10<link rel="prev" href="tutorial___view_interface_.html" title="Tutorial: view_interface">
11<link rel="next" href="tutorial___reverse_iterator_.html" title="Tutorial: reverse_iterator">
12</head>
13<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14<table cellpadding="2" width="100%"><tr>
15<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
16<td align="center"><a href="../../../index.html">Home</a></td>
17<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
18<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
19<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
20<td align="center"><a href="../../../more/index.htm">More</a></td>
21</tr></table>
22<hr>
23<div class="spirit-nav">
24<a accesskey="p" href="tutorial___view_interface_.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../stl_interfaces.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="tutorial___reverse_iterator_.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
25</div>
26<div class="section">
27<div class="titlepage"><div><div><h2 class="title" style="clear: both">
28<a name="boost_stlinterfaces.tutorial___sequence_container_interface_"></a><a class="link" href="tutorial___sequence_container_interface_.html" title="Tutorial: sequence_container_interface">Tutorial:
29    <code class="computeroutput"><span class="identifier">sequence_container_interface</span></code></a>
30</h2></div></div></div>
31<div class="note"><table border="0" summary="Note">
32<tr>
33<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td>
34<th align="left">Note</th>
35</tr>
36<tr><td align="left" valign="top"><p>
37        All the member functions provided by <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
38        are in your container's base class — <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
39        — and can therefore be hidden if you define a member function with
40        the same name in your derived container. If you don't like the semantics
41        of any <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>-provided
42        member function, feel free to replace it.
43      </p></td></tr>
44</table></div>
45<h4>
46<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.h0"></a>
47      <span class="phrase"><a name="boost_stlinterfaces.tutorial___sequence_container_interface_.the__code__phrase_role__identifier__sequence_container_interface__phrase___code__template"></a></span><a class="link" href="tutorial___sequence_container_interface_.html#boost_stlinterfaces.tutorial___sequence_container_interface_.the__code__phrase_role__identifier__sequence_container_interface__phrase___code__template">The
48      <code class="computeroutput"><span class="identifier">sequence_container_interface</span></code>
49      Template</a>
50    </h4>
51<p>
52      As mentioned earlier, writing containers is very tedious. The container requirements
53      tables in the C++ standard are long and complicated, and there are a lot of
54      them. The requirements often call for multiple overloads of a function, all
55      of which could be implemented in terms of just one overload.
56    </p>
57<p>
58      There is a large development cost associated with implementing a standard-compliant
59      container. As a result very few people do so. <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
60      exists to make bring that large development time way, way down.
61    </p>
62<p>
63      Here is its declaration:
64    </p>
65<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Derived</span><span class="special">,</span> <span class="identifier">element_layout</span> <span class="identifier">Contiguity</span> <span class="special">=</span> <span class="identifier">element_layout</span><span class="special">::</span><span class="identifier">discontiguous</span><span class="special">&gt;</span>
66<span class="keyword">struct</span> <span class="identifier">sequence_container_interface</span><span class="special">;</span>
67</pre>
68<p>
69      Just as with <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/view_interface.html" title="Struct template view_interface">view_interface</a></code>, <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
70      takes the derived type and an optional non-type template parameter that indicates
71      whether <code class="computeroutput"><span class="identifier">Derived</span></code>'s iterators
72      are contiguous. The non-type parameter is necessary to support pre-C++20 code.
73    </p>
74<h4>
75<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.h1"></a>
76      <span class="phrase"><a name="boost_stlinterfaces.tutorial___sequence_container_interface_.how__code__phrase_role__identifier__sequence_container_interface__phrase___code__is_organized"></a></span><a class="link" href="tutorial___sequence_container_interface_.html#boost_stlinterfaces.tutorial___sequence_container_interface_.how__code__phrase_role__identifier__sequence_container_interface__phrase___code__is_organized">How
77      <code class="computeroutput"><span class="identifier">sequence_container_interface</span></code>
78      is Organized</a>
79    </h4>
80<p>
81      The tables below represent a subset of the operations needed for each of the
82      container requirements tables in the standard. Here are the tables that apply
83      to sequence containers (from <code class="computeroutput"><span class="special">[</span><span class="identifier">container</span><span class="special">.</span><span class="identifier">requirements</span><span class="special">]</span></code>
84      in the standard):
85    </p>
86<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
87<li class="listitem">
88          Container requirements <code class="computeroutput"><span class="special">[</span><span class="identifier">tab</span><span class="special">:</span><span class="identifier">container</span><span class="special">.</span><span class="identifier">req</span><span class="special">]</span></code>
89        </li>
90<li class="listitem">
91          Reversible container requirements <code class="computeroutput"><span class="special">[</span><span class="identifier">tab</span><span class="special">:</span><span class="identifier">container</span><span class="special">.</span><span class="identifier">rev</span><span class="special">.</span><span class="identifier">req</span><span class="special">]</span></code>
92        </li>
93<li class="listitem">
94          Optional container operations <code class="computeroutput"><span class="special">[</span><span class="identifier">tab</span><span class="special">:</span><span class="identifier">container</span><span class="special">.</span><span class="identifier">opt</span><span class="special">]</span></code>
95        </li>
96<li class="listitem">
97          Allocator-aware container requirements <code class="computeroutput"><span class="special">[</span><span class="identifier">tab</span><span class="special">:</span><span class="identifier">container</span><span class="special">.</span><span class="identifier">alloc</span><span class="special">.</span><span class="identifier">req</span><span class="special">]</span></code>
98        </li>
99<li class="listitem">
100          Sequence container requirements <code class="computeroutput"><span class="special">[</span><span class="identifier">tab</span><span class="special">:</span><span class="identifier">container</span><span class="special">.</span><span class="identifier">seq</span><span class="special">.</span><span class="identifier">req</span><span class="special">]</span></code>
101        </li>
102<li class="listitem">
103          Optional sequence container operations <code class="computeroutput"><span class="special">[</span><span class="identifier">tab</span><span class="special">:</span><span class="identifier">container</span><span class="special">.</span><span class="identifier">seq</span><span class="special">.</span><span class="identifier">opt</span><span class="special">]</span></code>
104        </li>
105</ul></div>
106<p>
107      Each requirements table lists all the types and operations required by a standard-conforming
108      container. All of these sets of requirements are supported by <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>,
109      except the allocator-aware container requirements. The container and sequence
110      container requirements are required for any sequence container. <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
111      provides each member in any table above (again, except the allocator-aware
112      ones). Each member is individually constrained, so if a given member (say,
113      a particular <code class="computeroutput"><span class="identifier">insert</span><span class="special">()</span></code>
114      overload) is ill-formed, it will not be usable in the resulting container.
115    </p>
116<div class="note"><table border="0" summary="Note">
117<tr>
118<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td>
119<th align="left">Note</th>
120</tr>
121<tr><td align="left" valign="top"><p>
122        All table requirements satisfied by Boost.STLInterfaces use the 2017 version
123        of the C++ Standard. See your favorite online resource for the contents of
124        these tables. Many people like <a href="http://eel.is/c++draft" target="_top">eel.is</a>,
125        which is really easy to navigate.
126      </p></td></tr>
127</table></div>
128<p>
129      Note that <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
130      does not interact at all with the allocator-aware container requirements, the
131      associative container requirements, or the unordered associative container
132      requirements. Specifically, nothing precludes you from satisfying any of those
133      sets or requirements — it's just that <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
134      does not.
135    </p>
136<h4>
137<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.h2"></a>
138      <span class="phrase"><a name="boost_stlinterfaces.tutorial___sequence_container_interface_.how__code__phrase_role__identifier__sequence_container_interface__phrase___code__works"></a></span><a class="link" href="tutorial___sequence_container_interface_.html#boost_stlinterfaces.tutorial___sequence_container_interface_.how__code__phrase_role__identifier__sequence_container_interface__phrase___code__works">How
139      <code class="computeroutput"><span class="identifier">sequence_container_interface</span></code>
140      Works</a>
141    </h4>
142<p>
143      To use <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>,
144      you provide certain operations yourself, and <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
145      fills in the rest. If any provided operation <code class="computeroutput"><span class="identifier">O</span></code>
146      is not to your liking — say, because you know of a way to do <code class="computeroutput"><span class="identifier">O</span></code> directly in a way that is more efficient
147      than the way that <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
148      does it — you can implement <code class="computeroutput"><span class="identifier">O</span></code>
149      yourself. Since your implementation is in a class <code class="computeroutput"><span class="identifier">D</span></code>
150      derived from <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>,
151      it will hide the <code class="computeroutput"><span class="identifier">O</span></code> from <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>.
152    </p>
153<p>
154      Below, there are tables that show what user-defined types and operations are
155      required for <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
156      to fulfill all the requirements from one of the C++ Standard's requirements
157      tables. For instance, the table "Optional User-Defined Types and Operations
158      for Containers" below shows what you need to provide to fulfill all the
159      requirements in the standard's "Container requirements <code class="computeroutput"><span class="special">[</span><span class="identifier">tab</span><span class="special">:</span><span class="identifier">container</span><span class="special">.</span><span class="identifier">req</span><span class="special">]</span></code>"
160      table.
161    </p>
162<p>
163      So, to use <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
164      to make a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span></code>-like container (which is not a sequence
165      container, because it has no <code class="computeroutput"><span class="identifier">insert</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">erase</span><span class="special">()</span></code>, etc.), you need to define the types and
166      operations in the "User-Defined Types and Operations for Containers"
167      table, and optionally the ones in the "Optional User-Defined Types and
168      Operations for Containers".
169    </p>
170<p>
171      To make a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward_list</span></code>-like type, you need to define
172      the types and operations in the "User-Defined Types and Operations for
173      Containers" table, and optionally the ones in the "Optional User-Defined
174      Types and Operations for Containers". You would also define the types
175      and operations in the "User-Defined Types and Operations for Sequence
176      Containers" table. You cannot define the types and operations in the "User-Defined
177      Types and Operations for Reversible Containers" table, because your container
178      is forward-only.
179    </p>
180<p>
181      To make a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span></code>-like type, you would provide the types
182      and operations in all the tables below.
183    </p>
184<p>
185      If you have a type that does not have all the operations in one of the tables,
186      that's fine -- you can just implement the operations that your type can do,
187      and whatever operations can be provided by <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
188      in terms of the user-defined operations, will be provided. For example, the
189      <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span></code>-like container described above would
190      have <code class="computeroutput"><span class="identifier">front</span><span class="special">()</span></code>
191      — which comes from the optional sequence container requirements —
192      even if you did not write any user-defined insertion or erasure member functions
193      into your container. If it has bidirectional iterators, the <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span></code>-like
194      container will have <code class="computeroutput"><span class="identifier">back</span><span class="special">()</span></code>
195      too.
196    </p>
197<h4>
198<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.h3"></a>
199      <span class="phrase"><a name="boost_stlinterfaces.tutorial___sequence_container_interface_.the__code__phrase_role__identifier__sequence_container_interface__phrase___code__tables"></a></span><a class="link" href="tutorial___sequence_container_interface_.html#boost_stlinterfaces.tutorial___sequence_container_interface_.the__code__phrase_role__identifier__sequence_container_interface__phrase___code__tables">The
200      <code class="computeroutput"><span class="identifier">sequence_container_interface</span></code>
201      Tables</a>
202    </h4>
203<p>
204      After each requirements table, there's a table indicating how <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
205      maps the user-defined operations to the operations it provides. These mapping
206      tables can be handy if you have a container that meets only some of the requirements
207      of one of the requirements tables.
208    </p>
209<p>
210      In the tables, <code class="computeroutput"><span class="identifier">X</span></code> is a user-defined
211      type derived from <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
212      containing objects of type <code class="computeroutput"><span class="identifier">T</span></code>;
213      <code class="computeroutput"><span class="identifier">a</span></code> and <code class="computeroutput"><span class="identifier">b</span></code>
214      are objects of type <code class="computeroutput"><span class="identifier">X</span></code>; <code class="computeroutput"><span class="identifier">i</span></code> and <code class="computeroutput"><span class="identifier">j</span></code>
215      are objects of type (possibly const) <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">iterator</span></code>;
216      <code class="computeroutput"><span class="identifier">u</span></code> is an identifier; <code class="computeroutput"><span class="identifier">r</span></code> is a non-const value of type <code class="computeroutput"><span class="identifier">X</span></code>; <code class="computeroutput"><span class="identifier">rv_c</span></code>
217      is a non-const rvalue of type <code class="computeroutput"><span class="identifier">X</span></code>;
218      <code class="computeroutput"><span class="identifier">i</span></code> and <code class="computeroutput"><span class="identifier">j</span></code>
219      are forward iterators that refer to elements implicitly convertible to <code class="computeroutput"><span class="identifier">T</span></code>; <code class="computeroutput"><span class="special">[</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">j</span><span class="special">)</span></code> is a range; <code class="computeroutput"><span class="identifier">il</span></code>
220      is an object of type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">initializer_list</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>; <code class="computeroutput"><span class="identifier">n</span></code> is a value of type <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">size_type</span></code>,
221      <code class="computeroutput"><span class="identifier">p</span></code> is a valid constant iterator
222      to <code class="computeroutput"><span class="identifier">a</span></code>; <code class="computeroutput"><span class="identifier">q</span></code>
223      is a valid dereferenceable constant iterator to <code class="computeroutput"><span class="identifier">a</span></code>;
224      <code class="computeroutput"><span class="special">[</span><span class="identifier">q1</span><span class="special">,</span> <span class="identifier">q2</span><span class="special">)</span></code>
225      is a valid range of constant iterators to <code class="computeroutput"><span class="identifier">a</span></code>;
226      <code class="computeroutput"><span class="identifier">t</span></code> is an lvalue or a const rvalue
227      of T; and <code class="computeroutput"><span class="identifier">rv</span></code> denotes a non-const
228      rvalue of <code class="computeroutput"><span class="identifier">T</span></code>. <code class="computeroutput"><span class="identifier">Args</span></code> is a template parameter pack; <code class="computeroutput"><span class="identifier">args</span></code> denotes a function parameter pack with
229      the pattern <code class="computeroutput"><span class="identifier">Args</span> <span class="special">&amp;&amp;</span></code>.
230    </p>
231<h4>
232<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.h4"></a>
233      <span class="phrase"><a name="boost_stlinterfaces.tutorial___sequence_container_interface_.container"></a></span><a class="link" href="tutorial___sequence_container_interface_.html#boost_stlinterfaces.tutorial___sequence_container_interface_.container">Container</a>
234    </h4>
235<p>
236      All containers must meet the requirements of this table:
237    </p>
238<div class="table">
239<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.t0"></a><p class="title"><b>Table 38.3. User-Defined Types and Operations for Containers</b></p>
240<div class="table-contents"><table class="table" summary="User-Defined Types and Operations for Containers">
241<colgroup>
242<col>
243<col>
244<col>
245<col>
246</colgroup>
247<thead><tr>
248<th>
249              <p>
250                Expression
251              </p>
252            </th>
253<th>
254              <p>
255                Return Type
256              </p>
257            </th>
258<th>
259              <p>
260                Semantics
261              </p>
262            </th>
263<th>
264              <p>
265                Assertion/note/pre-/post-condition
266              </p>
267            </th>
268</tr></thead>
269<tbody>
270<tr>
271<td>
272              <p>
273                <code class="computeroutput"><span class="identifier">X</span><span class="error">​</span><span class="special">::</span><span class="error">​</span><span class="identifier">value_type</span></code>
274              </p>
275            </td>
276<td>
277              <p>
278                <code class="computeroutput"><span class="identifier">T</span></code>
279              </p>
280            </td>
281<td>
282            </td>
283<td>
284              <p>
285                Compile time only.
286              </p>
287            </td>
288</tr>
289<tr>
290<td>
291              <p>
292                <code class="computeroutput"><span class="identifier">X</span><span class="error">​</span><span class="special">::</span><span class="error">​</span><span class="identifier">reference</span></code>
293              </p>
294            </td>
295<td>
296              <p>
297                <code class="computeroutput"><span class="identifier">T</span> <span class="special">&amp;</span></code>
298              </p>
299            </td>
300<td>
301            </td>
302<td>
303              <p>
304                Compile time only.
305              </p>
306            </td>
307</tr>
308<tr>
309<td>
310              <p>
311                <code class="computeroutput"><span class="identifier">X</span><span class="error">​</span><span class="special">::</span><span class="error">​</span><span class="identifier">const_reference</span></code>
312              </p>
313            </td>
314<td>
315              <p>
316                <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span>
317                <span class="special">&amp;</span></code>
318              </p>
319            </td>
320<td>
321            </td>
322<td>
323              <p>
324                Compile time only.
325              </p>
326            </td>
327</tr>
328<tr>
329<td>
330              <p>
331                <code class="computeroutput"><span class="identifier">X</span><span class="error">​</span><span class="special">::</span><span class="error">​</span><span class="identifier">iterator</span></code>
332              </p>
333            </td>
334<td>
335              <p>
336                An iterator whose <code class="computeroutput"><span class="identifier">value_type</span></code>
337                is <code class="computeroutput"><span class="identifier">T</span></code>.
338              </p>
339            </td>
340<td>
341            </td>
342<td>
343              <p>
344                Must meet the forward iterator requirements, and must be convertible
345                to <code class="computeroutput"><span class="identifier">X</span><span class="error">​</span><span class="special">::</span><span class="error">​</span><span class="identifier">const_iterator</span></code>. Compile time only.
346              </p>
347            </td>
348</tr>
349<tr>
350<td>
351              <p>
352                <code class="computeroutput"><span class="identifier">X</span><span class="error">​</span><span class="special">::</span><span class="error">​</span><span class="identifier">const_iterator</span></code>
353              </p>
354            </td>
355<td>
356              <p>
357                A constant iterator whose <code class="computeroutput"><span class="identifier">value_type</span></code>
358                is <code class="computeroutput"><span class="identifier">T</span></code>.
359              </p>
360            </td>
361<td>
362            </td>
363<td>
364              <p>
365                Must meet the forward iterator requirements. Compile time only.
366              </p>
367            </td>
368</tr>
369<tr>
370<td>
371              <p>
372                <code class="computeroutput"><span class="identifier">X</span><span class="error">​</span><span class="special">::</span><span class="error">​</span><span class="identifier">difference_type</span></code>
373              </p>
374            </td>
375<td>
376              <p>
377                A signed integer type.
378              </p>
379            </td>
380<td>
381            </td>
382<td>
383              <p>
384                Identical to the diference type of <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">iterator</span></code>
385                and <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">const_iterator</span></code>. Compile time only.
386              </p>
387            </td>
388</tr>
389<tr>
390<td>
391              <p>
392                <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">size_type</span></code>
393              </p>
394            </td>
395<td>
396              <p>
397                An unsigned integer type.
398              </p>
399            </td>
400<td>
401            </td>
402<td>
403              <p>
404                Compile time only.
405              </p>
406            </td>
407</tr>
408<tr>
409<td>
410              <p>
411                <code class="computeroutput"><span class="identifier">X</span> <span class="identifier">u</span><span class="special">;</span></code>
412              </p>
413            </td>
414<td>
415            </td>
416<td>
417            </td>
418<td>
419              <p>
420                <span class="emphasis"><em>Ensures:</em></span> <code class="computeroutput"><span class="identifier">u</span><span class="special">.</span><span class="identifier">empty</span><span class="special">()</span></code>
421              </p>
422            </td>
423</tr>
424<tr>
425<td>
426              <p>
427</p>
428<pre class="programlisting"><span class="identifier">X</span> <span class="identifier">u</span><span class="special">(</span><span class="identifier">a</span><span class="special">);</span>
429<span class="identifier">X</span> <span class="identifier">u</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
430</pre>
431<p>
432              </p>
433            </td>
434<td>
435            </td>
436<td>
437            </td>
438<td>
439              <p>
440                <span class="emphasis"><em>Ensures:</em></span> <code class="computeroutput"><span class="identifier">u</span>
441                <span class="special">==</span> <span class="identifier">a</span></code>
442              </p>
443            </td>
444</tr>
445<tr>
446<td>
447              <p>
448</p>
449<pre class="programlisting"><span class="identifier">X</span> <span class="identifier">u</span><span class="special">(</span><span class="identifier">rv</span><span class="special">);</span>
450<span class="identifier">X</span> <span class="identifier">u</span> <span class="special">=</span> <span class="identifier">rv</span><span class="special">;</span>
451</pre>
452<p>
453              </p>
454            </td>
455<td>
456            </td>
457<td>
458            </td>
459<td>
460              <p>
461                <span class="emphasis"><em>Ensures:</em></span> <code class="computeroutput"><span class="identifier">u</span></code>
462                is equal to the value <code class="computeroutput"><span class="identifier">rv_c</span></code>
463                had before this operation.
464              </p>
465            </td>
466</tr>
467<tr>
468<td>
469              <p>
470                <code class="computeroutput"><span class="identifier">a</span> <span class="special">=</span>
471                <span class="identifier">rv</span></code>
472              </p>
473            </td>
474<td>
475              <p>
476                <code class="computeroutput"><span class="identifier">X</span> <span class="special">&amp;</span></code>
477              </p>
478            </td>
479<td>
480              <p>
481                All existing elements of <code class="computeroutput"><span class="identifier">a</span></code>
482                are either move assigned to or destroyed.
483              </p>
484            </td>
485<td>
486              <p>
487                <span class="emphasis"><em>Ensures:</em></span> <code class="computeroutput"><span class="identifier">u</span></code>
488                is equal to the value <code class="computeroutput"><span class="identifier">rv_c</span></code>
489                had before this operation.
490              </p>
491            </td>
492</tr>
493<tr>
494<td>
495              <p>
496                <code class="computeroutput"><span class="identifier">a</span><span class="special">.~</span><span class="identifier">X</span><span class="special">()</span></code>
497              </p>
498            </td>
499<td>
500            </td>
501<td>
502              <p>
503                Destroys every element of <code class="computeroutput"><span class="identifier">a</span></code>;
504                any memory obtained is deallocated.
505              </p>
506            </td>
507<td>
508            </td>
509</tr>
510<tr>
511<td>
512              <p>
513                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span></code>
514              </p>
515            </td>
516<td>
517              <p>
518                <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">iterator</span></code>
519              </p>
520            </td>
521<td>
522            </td>
523<td>
524              <p>
525                This is the non-<code class="computeroutput"><span class="keyword">const</span></code>
526                overload; the <code class="computeroutput"><span class="keyword">const</span></code>
527                overload is not needed.
528              </p>
529            </td>
530</tr>
531<tr>
532<td>
533              <p>
534                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>
535              </p>
536            </td>
537<td>
538              <p>
539                <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">iterator</span></code>
540              </p>
541            </td>
542<td>
543            </td>
544<td>
545              <p>
546                This is the non-<code class="computeroutput"><span class="keyword">const</span></code>
547                overload; the <code class="computeroutput"><span class="keyword">const</span></code>
548                overload is not needed.
549              </p>
550            </td>
551</tr>
552<tr>
553<td>
554              <p>
555                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>
556              </p>
557            </td>
558<td>
559              <p>
560                Convertible to <code class="computeroutput"><span class="keyword">bool</span></code>.
561              </p>
562            </td>
563<td>
564              <p>
565                Exchanges the contents of <code class="computeroutput"><span class="identifier">a</span></code>
566                and <code class="computeroutput"><span class="identifier">b</span></code>.
567              </p>
568            </td>
569<td>
570            </td>
571</tr>
572<tr>
573<td>
574              <p>
575                <code class="computeroutput"><span class="identifier">r</span> <span class="special">=</span>
576                <span class="identifier">a</span></code>
577              </p>
578            </td>
579<td>
580              <p>
581                <code class="computeroutput"><span class="identifier">X</span> <span class="special">&amp;</span></code>
582              </p>
583            </td>
584<td>
585            </td>
586<td>
587              <p>
588                <span class="emphasis"><em>Ensures:</em></span> <code class="computeroutput"><span class="identifier">r</span></code>
589                == <code class="computeroutput"><span class="identifier">a</span></code>.
590              </p>
591            </td>
592</tr>
593<tr>
594<td>
595              <p>
596                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">max_size</span><span class="special">()</span></code>
597              </p>
598            </td>
599<td>
600              <p>
601                <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">size_type</span></code>
602              </p>
603            </td>
604<td>
605              <p>
606                <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">l</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span>
607                <span class="identifier">l</span><span class="special">.</span><span class="identifier">end</span><span class="special">())</span></code>
608                for the largest possible container <code class="computeroutput"><span class="identifier">l</span></code>.
609              </p>
610            </td>
611<td>
612            </td>
613</tr>
614</tbody>
615</table></div>
616</div>
617<br class="table-break"><div class="note"><table border="0" summary="Note">
618<tr>
619<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td>
620<th align="left">Note</th>
621</tr>
622<tr><td align="left" valign="top"><p>
623        The requirements above are taken from the standard. Even though the standard
624        requires things to be a certain way, you can often define types that work
625        in any context in which a container is supposed to work, even though it varies
626        from the requirements above. In particular, you may want to have non-reference
627        and non-pointer types for <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">reference</span></code>
628        and <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">pointer</span></code>, respectively — and that
629        certainly will not break <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>.
630      </p></td></tr>
631</table></div>
632<p>
633      If you provide the types and operations above, <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
634      will provide the rest of the container requirements, using this mapping:
635    </p>
636<div class="table">
637<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.t1"></a><p class="title"><b>Table 38.4. User-Defined Operations to sequence_container_interface Operations</b></p>
638<div class="table-contents"><table class="table" summary="User-Defined Operations to sequence_container_interface Operations">
639<colgroup>
640<col>
641<col>
642<col>
643</colgroup>
644<thead><tr>
645<th>
646              <p>
647                User-Defined
648              </p>
649            </th>
650<th>
651              <p>
652                <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>-Provided
653              </p>
654            </th>
655<th>
656              <p>
657                Note
658              </p>
659            </th>
660</tr></thead>
661<tbody>
662<tr>
663<td>
664              <p>
665</p>
666<pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span>
667<span class="identifier">a</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></pre>
668<p>
669              </p>
670            </td>
671<td>
672              <p>
673</p>
674<pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">empty</span><span class="special">()</span>
675<span class="identifier">a</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span>
676<span class="identifier">a</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span>
677<span class="identifier">a</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span>
678<span class="identifier">a</span><span class="special">.</span><span class="identifier">cbegin</span><span class="special">()</span>
679<span class="identifier">a</span><span class="special">.</span><span class="identifier">cend</span><span class="special">()</span></pre>
680<p>
681              </p>
682            </td>
683<td>
684              <p>
685                The user-defined <code class="computeroutput"><span class="identifier">begin</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">end</span><span class="special">()</span></code> are non-<code class="computeroutput"><span class="keyword">const</span></code>,
686                and the <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>-provided
687                ones are <code class="computeroutput"><span class="keyword">const</span></code>. <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
688                can only provide <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code> if <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">const_iterator</span></code>
689                is a random access iterator; otherwise, it must be user-defined.
690              </p>
691            </td>
692</tr>
693<tr>
694<td>
695              <p>
696                <code class="computeroutput"><span class="identifier">a</span> <span class="special">==</span>
697                <span class="identifier">b</span></code>
698              </p>
699            </td>
700<td>
701              <p>
702                <code class="computeroutput"><span class="identifier">a</span> <span class="special">!=</span>
703                <span class="identifier">b</span></code>
704              </p>
705            </td>
706<td>
707              <p>
708                Though <code class="computeroutput"><span class="identifier">a</span> <span class="special">==</span>
709                <span class="identifier">b</span></code> is provided by <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>,
710                any user-defined replacement will be used to provide <code class="computeroutput"><span class="identifier">a</span> <span class="special">!=</span>
711                <span class="identifier">b</span></code>.
712              </p>
713            </td>
714</tr>
715<tr>
716<td>
717              <p>
718                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>
719              </p>
720            </td>
721<td>
722              <p>
723                <code class="computeroutput"><span class="identifier">swap</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span></code>
724              </p>
725            </td>
726<td>
727            </td>
728</tr>
729</tbody>
730</table></div>
731</div>
732<br class="table-break"><h4>
733<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.h5"></a>
734      <span class="phrase"><a name="boost_stlinterfaces.tutorial___sequence_container_interface_.reversible_container"></a></span><a class="link" href="tutorial___sequence_container_interface_.html#boost_stlinterfaces.tutorial___sequence_container_interface_.reversible_container">Reversible
735      Container</a>
736    </h4>
737<p>
738      Containers that are reverse-iterable must meet the requirements of this table
739      (in addition to the container requirements):
740    </p>
741<div class="table">
742<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.t2"></a><p class="title"><b>Table 38.5. User-Defined Types and Operations for Reversible Containers</b></p>
743<div class="table-contents"><table class="table" summary="User-Defined Types and Operations for Reversible Containers">
744<colgroup>
745<col>
746<col>
747<col>
748<col>
749</colgroup>
750<thead><tr>
751<th>
752              <p>
753                Expression
754              </p>
755            </th>
756<th>
757              <p>
758                Return Type
759              </p>
760            </th>
761<th>
762              <p>
763                Semantics
764              </p>
765            </th>
766<th>
767              <p>
768                Assertion/note/pre-/post-condition
769              </p>
770            </th>
771</tr></thead>
772<tbody>
773<tr>
774<td>
775              <p>
776                <code class="computeroutput"><span class="identifier">X</span><span class="error">​</span><span class="special">::</span><span class="error">​</span><span class="identifier">reverse_iterator</span></code>
777              </p>
778            </td>
779<td>
780              <p>
781                <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">stl_interfaces</span><span class="special">::</span><span class="identifier">reverse_iterator</span><span class="special">&lt;</span><span class="identifier">X</span><span class="special">::</span><span class="identifier">iterator</span><span class="special">&gt;</span></code>
782              </p>
783            </td>
784<td>
785            </td>
786<td>
787              <p>
788                Compile time only.
789              </p>
790            </td>
791</tr>
792<tr>
793<td>
794              <p>
795                <code class="computeroutput"><span class="identifier">X</span><span class="error">​</span><span class="special">::</span><span class="error">​</span><span class="identifier">const_reverse_iterator</span></code>
796              </p>
797            </td>
798<td>
799              <p>
800                <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">stl_interfaces</span><span class="special">::</span><span class="identifier">reverse_iterator</span><span class="special">&lt;</span><span class="identifier">X</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">&gt;</span></code>
801              </p>
802            </td>
803<td>
804            </td>
805<td>
806              <p>
807                Compile time only.
808              </p>
809            </td>
810</tr>
811</tbody>
812</table></div>
813</div>
814<br class="table-break"><p>
815      If you provide the types and operations above, <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
816      will provide the rest of the reversible container requirements, using this
817      mapping:
818    </p>
819<div class="table">
820<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.t3"></a><p class="title"><b>Table 38.6. User-Defined Operations to sequence_container_interface Operations</b></p>
821<div class="table-contents"><table class="table" summary="User-Defined Operations to sequence_container_interface Operations">
822<colgroup>
823<col>
824<col>
825<col>
826</colgroup>
827<thead><tr>
828<th>
829              <p>
830                User-Defined
831              </p>
832            </th>
833<th>
834              <p>
835                <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>-Provided
836              </p>
837            </th>
838<th>
839              <p>
840                Note
841              </p>
842            </th>
843</tr></thead>
844<tbody><tr>
845<td>
846              <p>
847</p>
848<pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span>
849<span class="identifier">a</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></pre>
850<p>
851              </p>
852            </td>
853<td>
854              <p>
855</p>
856<pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">rbegin</span><span class="special">()</span>
857<span class="identifier">a</span><span class="special">.</span><span class="identifier">rend</span><span class="special">()</span>
858<span class="identifier">a</span><span class="special">.</span><span class="identifier">crbegin</span><span class="special">()</span>
859<span class="identifier">a</span><span class="special">.</span><span class="identifier">crend</span><span class="special">()</span></pre>
860<p>
861              </p>
862            </td>
863<td>
864              <p>
865                The user-defined <code class="computeroutput"><span class="identifier">begin</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">end</span><span class="special">()</span></code> are non-<code class="computeroutput"><span class="keyword">const</span></code>,
866                and <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
867                provides both <code class="computeroutput"><span class="keyword">const</span></code>
868                and non-<code class="computeroutput"><span class="keyword">const</span></code> overloads
869                of <code class="computeroutput"><span class="identifier">rbegin</span><span class="special">()</span></code>
870                and <code class="computeroutput"><span class="identifier">rend</span><span class="special">()</span></code>.
871                <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
872                can only provide these operations if <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">iterator</span></code>
873                and <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">const_iterator</span></code> are bidirectional
874                iterators.
875              </p>
876            </td>
877</tr></tbody>
878</table></div>
879</div>
880<br class="table-break"><h4>
881<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.h6"></a>
882      <span class="phrase"><a name="boost_stlinterfaces.tutorial___sequence_container_interface_.optional_container_operations"></a></span><a class="link" href="tutorial___sequence_container_interface_.html#boost_stlinterfaces.tutorial___sequence_container_interface_.optional_container_operations">Optional
883      Container Operations</a>
884    </h4>
885<p>
886      Containers that are comparable with <code class="computeroutput"><span class="special">&lt;</span></code>,
887      <code class="computeroutput"><span class="special">&gt;</span></code>, <code class="computeroutput"><span class="special">&lt;=</span></code>,
888      and <code class="computeroutput"><span class="special">&gt;=</span></code> get those operations
889      automatically, so long as <code class="computeroutput"><span class="identifier">T</span></code>
890      is less-than comparable. In this case, there are no required user-defined operations,
891      so that table is not needed.
892    </p>
893<p>
894      <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
895      will provide the optional container requirements using this mapping:
896    </p>
897<div class="table">
898<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.t4"></a><p class="title"><b>Table 38.7. User-Defined Operations to sequence_container_interface Operations</b></p>
899<div class="table-contents"><table class="table" summary="User-Defined Operations to sequence_container_interface Operations">
900<colgroup>
901<col>
902<col>
903<col>
904</colgroup>
905<thead><tr>
906<th>
907              <p>
908                User-Defined
909              </p>
910            </th>
911<th>
912              <p>
913                <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>-Provided
914              </p>
915            </th>
916<th>
917              <p>
918                Note
919              </p>
920            </th>
921</tr></thead>
922<tbody><tr>
923<td>
924              <p>
925                <code class="computeroutput"><span class="identifier">a</span> <span class="special">&lt;</span>
926                <span class="identifier">b</span></code>
927              </p>
928            </td>
929<td>
930              <p>
931</p>
932<pre class="programlisting"><span class="identifier">a</span> <span class="special">&lt;=</span> <span class="identifier">b</span>
933<span class="identifier">a</span> <span class="special">&gt;</span> <span class="identifier">b</span>
934<span class="identifier">a</span> <span class="special">&gt;=</span> <span class="identifier">b</span></pre>
935<p>
936              </p>
937            </td>
938<td>
939              <p>
940                Though <code class="computeroutput"><span class="identifier">a</span> <span class="special">&lt;</span>
941                <span class="identifier">b</span></code> is provided by <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>,
942                any user-defined replacement will be used to provide the other operations
943                listed here.
944              </p>
945            </td>
946</tr></tbody>
947</table></div>
948</div>
949<br class="table-break"><h4>
950<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.h7"></a>
951      <span class="phrase"><a name="boost_stlinterfaces.tutorial___sequence_container_interface_.sequence_container"></a></span><a class="link" href="tutorial___sequence_container_interface_.html#boost_stlinterfaces.tutorial___sequence_container_interface_.sequence_container">Sequence
952      Container</a>
953    </h4>
954<p>
955      Sequence containers meet the requirements of this table (in addition to the
956      container requirements):
957    </p>
958<div class="table">
959<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.t5"></a><p class="title"><b>Table 38.8. User-Defined Types and Operations for Sequence Containers</b></p>
960<div class="table-contents"><table class="table" summary="User-Defined Types and Operations for Sequence Containers">
961<colgroup>
962<col>
963<col>
964<col>
965<col>
966</colgroup>
967<thead><tr>
968<th>
969              <p>
970                Expression
971              </p>
972            </th>
973<th>
974              <p>
975                Return Type
976              </p>
977            </th>
978<th>
979              <p>
980                Semantics
981              </p>
982            </th>
983<th>
984              <p>
985                Assertion/note/pre-/post-condition
986              </p>
987            </th>
988</tr></thead>
989<tbody>
990<tr>
991<td>
992              <p>
993                <code class="computeroutput"><span class="identifier">X</span> <span class="identifier">u</span><span class="special">(</span><span class="identifier">n</span><span class="special">,</span> <span class="identifier">t</span><span class="special">);</span></code>
994              </p>
995            </td>
996<td>
997            </td>
998<td>
999              <p>
1000                Constructs a sequence of <code class="computeroutput"><span class="identifier">n</span></code>
1001                copies of <code class="computeroutput"><span class="identifier">t</span></code>.
1002              </p>
1003            </td>
1004<td>
1005              <p>
1006                <span class="emphasis"><em>Ensures:</em></span> <code class="computeroutput"><span class="identifier">distance</span><span class="special">(</span><span class="identifier">u</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">u</span><span class="special">.</span><span class="identifier">end</span><span class="special">())</span> <span class="special">==</span> <span class="identifier">n</span></code>
1007              </p>
1008            </td>
1009</tr>
1010<tr>
1011<td>
1012              <p>
1013                <code class="computeroutput"><span class="identifier">X</span> <span class="identifier">u</span><span class="special">(</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">j</span><span class="special">);</span></code>
1014              </p>
1015            </td>
1016<td>
1017            </td>
1018<td>
1019              <p>
1020                Constructs a sequence equal to <code class="computeroutput"><span class="special">[</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">j</span><span class="special">)</span></code>.
1021              </p>
1022            </td>
1023<td>
1024              <p>
1025                <span class="emphasis"><em>Ensures:</em></span> <code class="computeroutput"><span class="identifier">distance</span><span class="special">(</span><span class="identifier">u</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">u</span><span class="special">.</span><span class="identifier">end</span><span class="special">())</span> <span class="special">==</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">j</span><span class="special">)</span></code>
1026              </p>
1027            </td>
1028</tr>
1029<tr>
1030<td>
1031              <p>
1032                <code class="computeroutput"><span class="identifier">X</span> <span class="identifier">u</span><span class="special">(</span><span class="identifier">il</span><span class="special">);</span></code>
1033              </p>
1034            </td>
1035<td>
1036            </td>
1037<td>
1038              <p>
1039                <code class="computeroutput"><span class="identifier">X</span> <span class="identifier">u</span><span class="special">(</span><span class="identifier">il</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">il</span><span class="special">.</span><span class="identifier">end</span><span class="special">());</span></code>
1040              </p>
1041            </td>
1042<td>
1043            </td>
1044</tr>
1045<tr>
1046<td>
1047              <p>
1048                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">emplace</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">args</span><span class="special">)</span></code>
1049              </p>
1050            </td>
1051<td>
1052              <p>
1053                <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">iterator</span></code>
1054              </p>
1055            </td>
1056<td>
1057              <p>
1058                Inserts an object of type T constructed with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...</span></code> before <code class="computeroutput"><span class="identifier">p</span></code>.
1059              </p>
1060            </td>
1061<td>
1062              <p>
1063                <code class="computeroutput"><span class="identifier">args</span></code> may directly
1064                or indirectly refer to a value in <code class="computeroutput"><span class="identifier">a</span></code>.
1065              </p>
1066            </td>
1067</tr>
1068<tr>
1069<td>
1070              <p>
1071                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">i</span><span class="special">,</span> <span class="identifier">j</span><span class="special">)</span></code>
1072              </p>
1073            </td>
1074<td>
1075              <p>
1076                <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">iterator</span></code>
1077              </p>
1078            </td>
1079<td>
1080              <p>
1081                Inserts copies of the elements in <code class="computeroutput"><span class="special">[</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">j</span><span class="special">)</span></code>
1082                before <code class="computeroutput"><span class="identifier">p</span></code>.
1083              </p>
1084            </td>
1085<td>
1086            </td>
1087</tr>
1088<tr>
1089<td>
1090              <p>
1091                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">q1</span><span class="special">,</span> <span class="identifier">q2</span><span class="special">)</span></code>
1092              </p>
1093            </td>
1094<td>
1095              <p>
1096                <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">iterator</span></code>
1097              </p>
1098            </td>
1099<td>
1100              <p>
1101                Erases the elements in the range <code class="computeroutput"><span class="special">[</span><span class="identifier">q1</span><span class="special">,</span> <span class="identifier">q2</span><span class="special">)</span></code>.
1102              </p>
1103            </td>
1104<td>
1105            </td>
1106</tr>
1107</tbody>
1108</table></div>
1109</div>
1110<br class="table-break"><div class="important"><table border="0" summary="Important">
1111<tr>
1112<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../doc/src/images/important.png"></td>
1113<th align="left">Important</th>
1114</tr>
1115<tr><td align="left" valign="top"><p>
1116        In the notes for <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">emplace</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">args</span><span class="special">)</span></code>, it says: "<code class="computeroutput"><span class="identifier">args</span></code>
1117        may directly or indirectly refer to a value in <code class="computeroutput"><span class="identifier">a</span></code>".
1118        Don't forget to handle that case in your implementation. Otherwise, <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">emplace</span><span class="special">(</span><span class="identifier">a</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">a</span><span class="special">.</span><span class="identifier">back</span><span class="special">())</span></code> may do the wrong thing.
1119      </p></td></tr>
1120</table></div>
1121<p>
1122      If you provide the types and operations above, <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
1123      will provide the rest of the sequence container requirements, using this mapping:
1124    </p>
1125<div class="table">
1126<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.t6"></a><p class="title"><b>Table 38.9. User-Defined Operations to sequence_container_interface Operations</b></p>
1127<div class="table-contents"><table class="table" summary="User-Defined Operations to sequence_container_interface Operations">
1128<colgroup>
1129<col>
1130<col>
1131<col>
1132</colgroup>
1133<thead><tr>
1134<th>
1135              <p>
1136                User-Defined
1137              </p>
1138            </th>
1139<th>
1140              <p>
1141                <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>-Provided
1142              </p>
1143            </th>
1144<th>
1145              <p>
1146                Note
1147              </p>
1148            </th>
1149</tr></thead>
1150<tbody>
1151<tr>
1152<td>
1153              <p>
1154                <code class="computeroutput"><span class="identifier">X</span><span class="special">(</span><span class="identifier">il</span><span class="special">)</span></code>
1155              </p>
1156            </td>
1157<td>
1158              <p>
1159                <code class="computeroutput"><span class="identifier">a</span> <span class="special">=</span>
1160                <span class="identifier">il</span></code>
1161              </p>
1162            </td>
1163<td>
1164            </td>
1165</tr>
1166<tr>
1167<td>
1168              <p>
1169                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">emplace</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">args</span><span class="special">)</span></code>
1170              </p>
1171            </td>
1172<td>
1173              <p>
1174</p>
1175<pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span>
1176<span class="identifier">a</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">rv</span><span class="special">)</span></pre>
1177<p>
1178              </p>
1179            </td>
1180<td>
1181            </td>
1182</tr>
1183<tr>
1184<td>
1185              <p>
1186                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">i</span><span class="special">,</span> <span class="identifier">j</span><span class="special">)</span></code>
1187              </p>
1188            </td>
1189<td>
1190              <p>
1191</p>
1192<pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span>
1193<span class="identifier">a</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">il</span><span class="special">)</span></pre>
1194<p>
1195              </p>
1196            </td>
1197<td>
1198            </td>
1199</tr>
1200<tr>
1201<td>
1202              <p>
1203                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">q1</span><span class="special">,</span> <span class="identifier">q2</span><span class="special">)</span></code>
1204              </p>
1205            </td>
1206<td>
1207              <p>
1208</p>
1209<pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">q</span><span class="special">)</span>
1210<span class="identifier">a</span><span class="special">.</span><span class="identifier">clear</span><span class="special">()</span></pre>
1211<p>
1212              </p>
1213            </td>
1214<td>
1215            </td>
1216</tr>
1217<tr>
1218<td>
1219              <p>
1220</p>
1221<pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">q1</span><span class="special">,</span> <span class="identifier">q2</span><span class="special">)</span>
1222<span class="identifier">a</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">i</span><span class="special">,</span> <span class="identifier">j</span><span class="special">)</span></pre>
1223<p>
1224              </p>
1225            </td>
1226<td>
1227              <p>
1228</p>
1229<pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">j</span><span class="special">)</span>
1230<span class="identifier">a</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">n</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span>
1231<span class="identifier">a</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">il</span><span class="special">)</span></pre>
1232<p>
1233              </p>
1234            </td>
1235<td>
1236              <p>
1237                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">q1</span><span class="special">,</span> <span class="identifier">q2</span><span class="special">)</span></code>
1238                and <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">i</span><span class="special">,</span> <span class="identifier">j</span><span class="special">)</span></code>
1239                must both be user-defined for <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
1240                to provide these operations.
1241              </p>
1242            </td>
1243</tr>
1244</tbody>
1245</table></div>
1246</div>
1247<br class="table-break"><h4>
1248<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.h8"></a>
1249      <span class="phrase"><a name="boost_stlinterfaces.tutorial___sequence_container_interface_.optional_sequence_container_operations"></a></span><a class="link" href="tutorial___sequence_container_interface_.html#boost_stlinterfaces.tutorial___sequence_container_interface_.optional_sequence_container_operations">Optional
1250      Sequence Container Operations</a>
1251    </h4>
1252<p>
1253      Sequence containers with <code class="computeroutput"><span class="identifier">front</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">back</span><span class="special">()</span></code>, or any of the other operations in this table
1254      must define these operations (in addition to the container requirements):
1255    </p>
1256<div class="table">
1257<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.t7"></a><p class="title"><b>Table 38.10. User-Defined Types and Operations for Sequence Containers</b></p>
1258<div class="table-contents"><table class="table" summary="User-Defined Types and Operations for Sequence Containers">
1259<colgroup>
1260<col>
1261<col>
1262<col>
1263<col>
1264</colgroup>
1265<thead><tr>
1266<th>
1267              <p>
1268                Expression
1269              </p>
1270            </th>
1271<th>
1272              <p>
1273                Return Type
1274              </p>
1275            </th>
1276<th>
1277              <p>
1278                Semantics
1279              </p>
1280            </th>
1281<th>
1282              <p>
1283                Assertion/note/pre-/post-condition
1284              </p>
1285            </th>
1286</tr></thead>
1287<tbody>
1288<tr>
1289<td>
1290              <p>
1291                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">emplace_front</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span></code>
1292              </p>
1293            </td>
1294<td>
1295              <p>
1296                <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">reference</span></code>
1297              </p>
1298            </td>
1299<td>
1300              <p>
1301                Prepends an object of type <code class="computeroutput"><span class="identifier">T</span></code>
1302                constructed with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...</span></code>.
1303              </p>
1304            </td>
1305<td>
1306            </td>
1307</tr>
1308<tr>
1309<td>
1310              <p>
1311                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">emplace_back</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span></code>
1312              </p>
1313            </td>
1314<td>
1315              <p>
1316                <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">reference</span></code>
1317              </p>
1318            </td>
1319<td>
1320              <p>
1321                Appends an object of type <code class="computeroutput"><span class="identifier">T</span></code>
1322                constructed with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...</span></code>.
1323              </p>
1324            </td>
1325<td>
1326            </td>
1327</tr>
1328</tbody>
1329</table></div>
1330</div>
1331<br class="table-break"><p>
1332      If you provide the types and operations above, <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
1333      will provide the rest of the optional sequence container requirements, using
1334      this mapping:
1335    </p>
1336<div class="table">
1337<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.t8"></a><p class="title"><b>Table 38.11. User-Defined Operations to sequence_container_interface Operations</b></p>
1338<div class="table-contents"><table class="table" summary="User-Defined Operations to sequence_container_interface Operations">
1339<colgroup>
1340<col>
1341<col>
1342<col>
1343</colgroup>
1344<thead><tr>
1345<th>
1346              <p>
1347                User-Defined
1348              </p>
1349            </th>
1350<th>
1351              <p>
1352                <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>-Provided
1353              </p>
1354            </th>
1355<th>
1356              <p>
1357                Note
1358              </p>
1359            </th>
1360</tr></thead>
1361<tbody>
1362<tr>
1363<td>
1364              <p>
1365                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span></code>
1366              </p>
1367            </td>
1368<td>
1369              <p>
1370</p>
1371<pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">front</span><span class="special">()</span>
1372<span class="identifier">a</span><span class="special">[</span><span class="identifier">n</span><span class="special">]</span>
1373<span class="identifier">a</span><span class="special">.</span><span class="identifier">at</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span>
1374</pre>
1375<p>
1376              </p>
1377            </td>
1378<td>
1379              <p>
1380                These operations are provided in <code class="computeroutput"><span class="keyword">const</span></code>
1381                and non-<code class="computeroutput"><span class="keyword">const</span></code> overloads.
1382                <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
1383                can only provide <code class="computeroutput"><span class="identifier">a</span><span class="special">[</span><span class="identifier">n</span><span class="special">]</span></code> and <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">at</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code> if <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">iterator</span></code>
1384                and <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">const_iterator</span></code> are random access
1385                iterators.
1386              </p>
1387            </td>
1388</tr>
1389<tr>
1390<td>
1391              <p>
1392                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>
1393              </p>
1394            </td>
1395<td>
1396              <p>
1397                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">back</span><span class="special">()</span></code>
1398              </p>
1399            </td>
1400<td>
1401              <p>
1402                <code class="computeroutput"><span class="identifier">back</span><span class="special">()</span></code>
1403                is provided in <code class="computeroutput"><span class="keyword">const</span></code>
1404                and non-<code class="computeroutput"><span class="keyword">const</span></code> overloads.
1405                <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
1406                can only provide <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">back</span><span class="special">()</span></code> if <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">iterator</span></code>
1407                and <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">const_iterator</span></code> are bidirectional
1408                iterators.
1409              </p>
1410            </td>
1411</tr>
1412<tr>
1413<td>
1414              <p>
1415                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">emplace_front</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span></code>
1416              </p>
1417            </td>
1418<td>
1419              <p>
1420</p>
1421<pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">push_front</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span>
1422<span class="identifier">a</span><span class="special">.</span><span class="identifier">push_front</span><span class="special">(</span><span class="identifier">rv</span><span class="special">)</span>
1423</pre>
1424<p>
1425              </p>
1426            </td>
1427<td>
1428            </td>
1429</tr>
1430<tr>
1431<td>
1432              <p>
1433                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">emplace_back</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span></code>
1434              </p>
1435            </td>
1436<td>
1437              <p>
1438</p>
1439<pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span>
1440<span class="identifier">a</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">rv</span><span class="special">)</span>
1441</pre>
1442<p>
1443              </p>
1444            </td>
1445<td>
1446            </td>
1447</tr>
1448<tr>
1449<td>
1450              <p>
1451</p>
1452<pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">emplace_front</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span>
1453<span class="identifier">a</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">q1</span><span class="special">,</span> <span class="identifier">q2</span><span class="special">)</span></pre>
1454<p>
1455              </p>
1456            </td>
1457<td>
1458              <p>
1459                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">pop_front</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span></code>
1460              </p>
1461            </td>
1462<td>
1463              <p>
1464                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">emplace_front</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span></code>
1465                and <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">q1</span><span class="special">,</span> <span class="identifier">q2</span><span class="special">)</span></code>
1466                must both be user-defined for <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
1467                to provide this operation.
1468              </p>
1469            </td>
1470</tr>
1471<tr>
1472<td>
1473              <p>
1474</p>
1475<pre class="programlisting"><span class="identifier">a</span><span class="special">.</span><span class="identifier">emplace_back</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span>
1476<span class="identifier">a</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">q1</span><span class="special">,</span> <span class="identifier">q2</span><span class="special">)</span></pre>
1477<p>
1478              </p>
1479            </td>
1480<td>
1481              <p>
1482                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">pop_back</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span></code>
1483              </p>
1484            </td>
1485<td>
1486              <p>
1487                <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">emplace_front</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span></code>
1488                and <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">q1</span><span class="special">,</span> <span class="identifier">q2</span><span class="special">)</span></code>
1489                must both be user-defined for <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
1490                to provide this operation.
1491              </p>
1492            </td>
1493</tr>
1494</tbody>
1495</table></div>
1496</div>
1497<br class="table-break"><div class="note"><table border="0" summary="Note">
1498<tr>
1499<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td>
1500<th align="left">Note</th>
1501</tr>
1502<tr><td align="left" valign="top"><p>
1503        <code class="computeroutput"><span class="identifier">emplace_front</span><span class="special">()</span></code>
1504        and <code class="computeroutput"><span class="identifier">emplace_back</span><span class="special">()</span></code>
1505        are not needed for some of the <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>-provided
1506        operations above (e.g. <code class="computeroutput"><span class="identifier">pop_front</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">pop_back</span><span class="special">()</span></code>, respectively). However, they are each
1507        used as the user-defined operation that indicates that the container being
1508        defined is front- or back-mutation-friendly.
1509      </p></td></tr>
1510</table></div>
1511<h4>
1512<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.h9"></a>
1513      <span class="phrase"><a name="boost_stlinterfaces.tutorial___sequence_container_interface_.general_requirements_on_all_user_defined_operations"></a></span><a class="link" href="tutorial___sequence_container_interface_.html#boost_stlinterfaces.tutorial___sequence_container_interface_.general_requirements_on_all_user_defined_operations">General
1514      Requirements on All User-Defined Operations</a>
1515    </h4>
1516<p>
1517      There are other requirements listed in the standard that do not appear in any
1518      of the requirements tables; user-defined operations must conform to those as
1519      well:
1520    </p>
1521<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1522<li class="listitem">
1523          If an exception is thrown by an <code class="computeroutput"><span class="identifier">insert</span><span class="special">()</span></code> or <code class="computeroutput"><span class="identifier">emplace</span><span class="special">()</span></code> call while inserting a single element,
1524          that function has no effect.
1525        </li>
1526<li class="listitem">
1527          No <code class="computeroutput"><span class="identifier">erase</span><span class="special">()</span></code>
1528          function throws an exception.
1529        </li>
1530<li class="listitem">
1531          No copy constructor or assignment operator of a returned iterator throws
1532          an exception.
1533        </li>
1534<li class="listitem">
1535          The iterator returned from <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">emplace</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span>
1536          <span class="identifier">args</span><span class="special">)</span></code>
1537          points to the new element constructed from <code class="computeroutput"><span class="identifier">args</span></code>
1538          into <code class="computeroutput"><span class="identifier">a</span></code>.
1539        </li>
1540<li class="listitem">
1541          The iterator returned from <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span>
1542          <span class="identifier">i</span><span class="special">,</span>
1543          <span class="identifier">j</span><span class="special">)</span></code>
1544          points to the copy of the first element inserted into <code class="computeroutput"><span class="identifier">a</span></code>,
1545          or <code class="computeroutput"><span class="identifier">p</span></code> if <code class="computeroutput"><span class="identifier">i</span>
1546          <span class="special">==</span> <span class="identifier">j</span></code>.
1547        </li>
1548<li class="listitem">
1549          The iterator returned by <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">q1</span><span class="special">,</span>
1550          <span class="identifier">q2</span><span class="special">)</span></code>
1551          points to the element pointed to by <code class="computeroutput"><span class="identifier">q2</span></code>
1552          prior to any elements being erased. If no such element exists, <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code> is returned.
1553        </li>
1554</ul></div>
1555<h4>
1556<a name="boost_stlinterfaces.tutorial___sequence_container_interface_.h10"></a>
1557      <span class="phrase"><a name="boost_stlinterfaces.tutorial___sequence_container_interface_.example___code__phrase_role__identifier__static_vector__phrase___code_"></a></span><a class="link" href="tutorial___sequence_container_interface_.html#boost_stlinterfaces.tutorial___sequence_container_interface_.example___code__phrase_role__identifier__static_vector__phrase___code_">Example:
1558      <code class="computeroutput"><span class="identifier">static_vector</span></code></a>
1559    </h4>
1560<p>
1561      Let's look at an example. <a href="https://www.boost.org/doc/libs/release/libs/container" target="_top">Boost.Container</a>
1562      contains a template called <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">container</span><span class="special">::</span><span class="identifier">static_vector</span></code>,
1563      which is a fixed-capacity vector that does not allocate from the heap. We have
1564      a similar template in this example, <code class="computeroutput"><span class="identifier">static_vector</span></code>.
1565      It is implemented by deriving from <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>,
1566      which provides much of the API specified in the STL, based on a subset of the
1567      API that the user must provide.
1568    </p>
1569<p>
1570      <code class="computeroutput"><span class="identifier">static_vector</span></code> meets all the
1571      sequence container requirements (including many of the optional ones) and reversible
1572      container requirements in the standard. It does not meet the allocator-aware
1573      container requirements, since it does not allocate. In short, it has the same
1574      full API as <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span></code>, without all the allocatory bits.
1575    </p>
1576<p>
1577</p>
1578<pre class="programlisting"><span class="comment">// The sections of member functions below are commented as they are in the</span>
1579<span class="comment">// standard for std::vector.  Each section has two numbers: the number of</span>
1580<span class="comment">// member functions in that section, and the number that are missing, because</span>
1581<span class="comment">// they are provided by sequence_container_interface.  The purely</span>
1582<span class="comment">// allocator-specific members are neither present nor part of the counts.</span>
1583<span class="comment">//</span>
1584<span class="comment">// We're passing boost::stl_interfaces::contiguous here, so that</span>
1585<span class="comment">// sequence_container_interface knows that it should provide data().</span>
1586<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">&gt;</span>
1587<span class="keyword">struct</span> <span class="identifier">static_vector</span> <span class="special">:</span> <span class="identifier">sequence_container_interface</span><span class="special">&lt;</span>
1588                           <span class="identifier">static_vector</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">N</span><span class="special">&gt;,</span>
1589                           <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stl_interfaces</span><span class="special">::</span><span class="identifier">element_layout</span><span class="special">::</span><span class="identifier">contiguous</span><span class="special">&gt;</span>
1590<span class="special">{</span>
1591    <span class="comment">// These are the types required for reversible containers.  These must be</span>
1592    <span class="comment">// user-defined.</span>
1593    <span class="keyword">using</span> <span class="identifier">value_type</span> <span class="special">=</span> <span class="identifier">T</span><span class="special">;</span>
1594    <span class="keyword">using</span> <span class="identifier">pointer</span> <span class="special">=</span> <span class="identifier">T</span> <span class="special">*;</span>
1595    <span class="keyword">using</span> <span class="identifier">const_pointer</span> <span class="special">=</span> <span class="identifier">T</span> <span class="keyword">const</span> <span class="special">*;</span>
1596    <span class="keyword">using</span> <span class="identifier">reference</span> <span class="special">=</span> <span class="identifier">value_type</span> <span class="special">&amp;;</span>
1597    <span class="keyword">using</span> <span class="identifier">const_reference</span> <span class="special">=</span> <span class="identifier">value_type</span> <span class="keyword">const</span> <span class="special">&amp;;</span>
1598    <span class="keyword">using</span> <span class="identifier">size_type</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">;</span>
1599    <span class="keyword">using</span> <span class="identifier">difference_type</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span><span class="special">;</span>
1600    <span class="keyword">using</span> <span class="identifier">iterator</span> <span class="special">=</span> <span class="identifier">T</span> <span class="special">*;</span>
1601    <span class="keyword">using</span> <span class="identifier">const_iterator</span> <span class="special">=</span> <span class="identifier">T</span> <span class="keyword">const</span> <span class="special">*;</span>
1602    <span class="keyword">using</span> <span class="identifier">reverse_iterator</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stl_interfaces</span><span class="special">::</span><span class="identifier">reverse_iterator</span><span class="special">&lt;</span><span class="identifier">iterator</span><span class="special">&gt;;</span>
1603    <span class="keyword">using</span> <span class="identifier">const_reverse_iterator</span> <span class="special">=</span>
1604        <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stl_interfaces</span><span class="special">::</span><span class="identifier">reverse_iterator</span><span class="special">&lt;</span><span class="identifier">const_iterator</span><span class="special">&gt;;</span>
1605
1606    <span class="comment">// construct/copy/destroy (9 members, skipped 2)</span>
1607    <span class="comment">//</span>
1608    <span class="comment">// Constructors and special member functions all must be user-provided.</span>
1609    <span class="comment">// Were they provided by sequence_container_interface, everything would break, due</span>
1610    <span class="comment">// to the language rules related to them.  However, assignment from</span>
1611    <span class="comment">// std::initializer_list and the destructor can come from</span>
1612    <span class="comment">// sequence_container_interface.</span>
1613    <span class="identifier">static_vector</span><span class="special">()</span> <span class="keyword">noexcept</span> <span class="special">:</span> <span class="identifier">size_</span><span class="special">(</span><span class="number">0</span><span class="special">)</span> <span class="special">{}</span>
1614    <span class="keyword">explicit</span> <span class="identifier">static_vector</span><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">n</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">size_</span><span class="special">(</span><span class="number">0</span><span class="special">)</span> <span class="special">{</span> <span class="identifier">resize</span><span class="special">(</span><span class="identifier">n</span><span class="special">);</span> <span class="special">}</span>
1615    <span class="keyword">explicit</span> <span class="identifier">static_vector</span><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">size_</span><span class="special">(</span><span class="number">0</span><span class="special">)</span>
1616    <span class="special">{</span>
1617        <span class="comment">// Note that you must write "this-&gt;" before all the member functions</span>
1618        <span class="comment">// provided by sequence_container_interface, which is slightly annoying.</span>
1619        <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">n</span><span class="special">,</span> <span class="identifier">x</span><span class="special">);</span>
1620    <span class="special">}</span>
1621    <span class="keyword">template</span><span class="special">&lt;</span>
1622        <span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">,</span>
1623        <span class="keyword">typename</span> <span class="identifier">Enable</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">enable_if_t</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_convertible</span><span class="special">&lt;</span>
1624            <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span><span class="special">&lt;</span><span class="identifier">InputIterator</span><span class="special">&gt;::</span><span class="identifier">iterator_category</span><span class="special">,</span>
1625            <span class="identifier">std</span><span class="special">::</span><span class="identifier">input_iterator_tag</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">&gt;&gt;</span>
1626    <span class="identifier">static_vector</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="special">:</span> <span class="identifier">size_</span><span class="special">(</span><span class="number">0</span><span class="special">)</span>
1627    <span class="special">{</span>
1628        <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">);</span>
1629    <span class="special">}</span>
1630    <span class="identifier">static_vector</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">initializer_list</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">il</span><span class="special">)</span> <span class="special">:</span>
1631        <span class="identifier">static_vector</span><span class="special">(</span><span class="identifier">il</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">il</span><span class="special">.</span><span class="identifier">end</span><span class="special">())</span>
1632    <span class="special">{}</span>
1633    <span class="identifier">static_vector</span><span class="special">(</span><span class="identifier">static_vector</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">size_</span><span class="special">(</span><span class="number">0</span><span class="special">)</span>
1634    <span class="special">{</span>
1635        <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">other</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">other</span><span class="special">.</span><span class="identifier">end</span><span class="special">());</span>
1636    <span class="special">}</span>
1637    <span class="identifier">static_vector</span><span class="special">(</span><span class="identifier">static_vector</span> <span class="special">&amp;&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">(</span>
1638        <span class="keyword">noexcept</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">declval</span><span class="special">&lt;</span><span class="identifier">static_vector</span><span class="special">&gt;().</span><span class="identifier">emplace_back</span><span class="special">(</span>
1639            <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">other</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()))))</span> <span class="special">:</span>
1640        <span class="identifier">size_</span><span class="special">(</span><span class="number">0</span><span class="special">)</span>
1641    <span class="special">{</span>
1642        <span class="keyword">for</span> <span class="special">(</span><span class="keyword">auto</span> <span class="special">&amp;</span> <span class="identifier">element</span> <span class="special">:</span> <span class="identifier">other</span><span class="special">)</span> <span class="special">{</span>
1643            <span class="identifier">emplace_back</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">element</span><span class="special">));</span>
1644        <span class="special">}</span>
1645        <span class="identifier">other</span><span class="special">.</span><span class="identifier">clear</span><span class="special">();</span>
1646    <span class="special">}</span>
1647    <span class="identifier">static_vector</span> <span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">static_vector</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span>
1648    <span class="special">{</span>
1649        <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">clear</span><span class="special">();</span>
1650        <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">other</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">other</span><span class="special">.</span><span class="identifier">end</span><span class="special">());</span>
1651        <span class="keyword">return</span> <span class="special">*</span><span class="keyword">this</span><span class="special">;</span>
1652    <span class="special">}</span>
1653    <span class="identifier">static_vector</span> <span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">static_vector</span> <span class="special">&amp;&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">(</span><span class="keyword">noexcept</span><span class="special">(</span>
1654        <span class="identifier">std</span><span class="special">::</span><span class="identifier">declval</span><span class="special">&lt;</span><span class="identifier">static_vector</span><span class="special">&gt;().</span><span class="identifier">emplace_back</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">other</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()))))</span>
1655    <span class="special">{</span>
1656        <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">clear</span><span class="special">();</span>
1657        <span class="keyword">for</span> <span class="special">(</span><span class="keyword">auto</span> <span class="special">&amp;</span> <span class="identifier">element</span> <span class="special">:</span> <span class="identifier">other</span><span class="special">)</span> <span class="special">{</span>
1658            <span class="identifier">emplace_back</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">element</span><span class="special">));</span>
1659        <span class="special">}</span>
1660        <span class="identifier">other</span><span class="special">.</span><span class="identifier">clear</span><span class="special">();</span>
1661        <span class="keyword">return</span> <span class="special">*</span><span class="keyword">this</span><span class="special">;</span>
1662    <span class="special">}</span>
1663    <span class="special">~</span><span class="identifier">static_vector</span><span class="special">()</span> <span class="special">{</span> <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">clear</span><span class="special">();</span> <span class="special">}</span>
1664
1665    <span class="comment">// iterators (2 members, skipped 10)</span>
1666    <span class="comment">//</span>
1667    <span class="comment">// This section is the first big win.  Instead of having to write 12</span>
1668    <span class="comment">// overloads line begin, cbegin, rbegin, crbegin, etc., we can just write</span>
1669    <span class="comment">// 2.</span>
1670    <span class="identifier">iterator</span> <span class="identifier">begin</span><span class="special">()</span> <span class="keyword">noexcept</span> <span class="special">{</span> <span class="keyword">return</span> <span class="keyword">reinterpret_cast</span><span class="special">&lt;</span><span class="identifier">T</span> <span class="special">*&gt;(</span><span class="identifier">buf_</span><span class="special">);</span> <span class="special">}</span>
1671    <span class="identifier">iterator</span> <span class="identifier">end</span><span class="special">()</span> <span class="keyword">noexcept</span>
1672    <span class="special">{</span>
1673        <span class="keyword">return</span> <span class="keyword">reinterpret_cast</span><span class="special">&lt;</span><span class="identifier">T</span> <span class="special">*&gt;(</span><span class="identifier">buf_</span> <span class="special">+</span> <span class="identifier">size_</span> <span class="special">*</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">T</span><span class="special">));</span>
1674    <span class="special">}</span>
1675
1676    <span class="comment">// capacity (6 members, skipped 2)</span>
1677    <span class="comment">//</span>
1678    <span class="comment">// Most of these are not even part of the general requirements, because</span>
1679    <span class="comment">// some are specific to std::vector and related types.  However, we do get</span>
1680    <span class="comment">// empty and size from sequence_container_interface.</span>
1681    <span class="identifier">size_type</span> <span class="identifier">max_size</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">N</span><span class="special">;</span> <span class="special">}</span>
1682    <span class="identifier">size_type</span> <span class="identifier">capacity</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">N</span><span class="special">;</span> <span class="special">}</span>
1683    <span class="keyword">void</span> <span class="identifier">resize</span><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">sz</span><span class="special">)</span> <span class="keyword">noexcept</span>
1684    <span class="special">{</span>
1685        <span class="identifier">resize_impl</span><span class="special">(</span><span class="identifier">sz</span><span class="special">,</span> <span class="special">[]</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">T</span><span class="special">();</span> <span class="special">});</span>
1686    <span class="special">}</span>
1687    <span class="keyword">void</span> <span class="identifier">resize</span><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">sz</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">noexcept</span>
1688    <span class="special">{</span>
1689        <span class="identifier">resize_impl</span><span class="special">(</span><span class="identifier">sz</span><span class="special">,</span> <span class="special">[&amp;]()</span> <span class="special">-&gt;</span> <span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">x</span><span class="special">;</span> <span class="special">});</span>
1690    <span class="special">}</span>
1691    <span class="keyword">void</span> <span class="identifier">reserve</span><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">{</span> <span class="identifier">assert</span><span class="special">(</span><span class="identifier">n</span> <span class="special">&lt;</span> <span class="identifier">capacity</span><span class="special">());</span> <span class="special">}</span>
1692    <span class="keyword">void</span> <span class="identifier">shrink_to_fit</span><span class="special">()</span> <span class="keyword">noexcept</span> <span class="special">{}</span>
1693
1694    <span class="comment">// element access (skipped 8)</span>
1695    <span class="comment">// data access (skipped 2)</span>
1696    <span class="comment">//</span>
1697    <span class="comment">// Another big win.  sequence_container_interface provides all of the</span>
1698    <span class="comment">// overloads of operator[], at, front, back, and data.</span>
1699
1700    <span class="comment">// modifiers (5 members, skipped 9)</span>
1701    <span class="comment">//</span>
1702    <span class="comment">// In this section we again get most of the API from</span>
1703    <span class="comment">// sequence_container_interface.</span>
1704
1705    <span class="comment">// emplace_back does not look very necessary -- just look at its trivial</span>
1706    <span class="comment">// implementation -- but we can't provide it from</span>
1707    <span class="comment">// sequence_container_interface, because it is an optional sequence</span>
1708    <span class="comment">// container interface.  We would not want emplace_front to suddenly</span>
1709    <span class="comment">// appear on our std::vector-like type, and there may be some other type</span>
1710    <span class="comment">// for which emplace_back is a bad idea.</span>
1711    <span class="comment">//</span>
1712    <span class="comment">// However, by providing emplace_back here, we signal to the</span>
1713    <span class="comment">// sequence_container_interface template that our container is</span>
1714    <span class="comment">// back-mutation-friendly, and this allows it to provide all the overloads</span>
1715    <span class="comment">// of push_back and pop_back.</span>
1716    <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
1717    <span class="identifier">reference</span> <span class="identifier">emplace_back</span><span class="special">(</span><span class="identifier">Args</span> <span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">)</span>
1718    <span class="special">{</span>
1719        <span class="keyword">return</span> <span class="special">*</span><span class="identifier">emplace</span><span class="special">(</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...);</span>
1720    <span class="special">}</span>
1721    <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
1722    <span class="identifier">iterator</span> <span class="identifier">emplace</span><span class="special">(</span><span class="identifier">const_iterator</span> <span class="identifier">pos</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">)</span>
1723    <span class="special">{</span>
1724        <span class="keyword">auto</span> <span class="identifier">position</span> <span class="special">=</span> <span class="keyword">const_cast</span><span class="special">&lt;</span><span class="identifier">T</span> <span class="special">*&gt;(</span><span class="identifier">pos</span><span class="special">);</span>
1725        <span class="keyword">bool</span> <span class="keyword">const</span> <span class="identifier">insert_before_end</span> <span class="special">=</span> <span class="identifier">position</span> <span class="special">&lt;</span> <span class="identifier">end</span><span class="special">();</span>
1726        <span class="keyword">if</span> <span class="special">(</span><span class="identifier">insert_before_end</span><span class="special">)</span> <span class="special">{</span>
1727            <span class="keyword">auto</span> <span class="identifier">last</span> <span class="special">=</span> <span class="identifier">end</span><span class="special">();</span>
1728            <span class="identifier">emplace_back</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">back</span><span class="special">()));</span>
1729            <span class="identifier">std</span><span class="special">::</span><span class="identifier">move_backward</span><span class="special">(</span><span class="identifier">position</span><span class="special">,</span> <span class="identifier">last</span> <span class="special">-</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">last</span><span class="special">);</span>
1730        <span class="special">}</span>
1731        <span class="keyword">new</span> <span class="special">(</span><span class="identifier">position</span><span class="special">)</span> <span class="identifier">T</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...);</span>
1732        <span class="keyword">if</span> <span class="special">(!</span><span class="identifier">insert_before_end</span><span class="special">)</span>
1733            <span class="special">++</span><span class="identifier">size_</span><span class="special">;</span>
1734        <span class="keyword">return</span> <span class="identifier">position</span><span class="special">;</span>
1735    <span class="special">}</span>
1736    <span class="comment">// Note: The iterator category here was upgraded to ForwardIterator</span>
1737    <span class="comment">// (instead of vector's InputIterator), to ensure linear time complexity.</span>
1738    <span class="keyword">template</span><span class="special">&lt;</span>
1739        <span class="keyword">typename</span> <span class="identifier">ForwardIterator</span><span class="special">,</span>
1740        <span class="keyword">typename</span> <span class="identifier">Enable</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">enable_if_t</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_convertible</span><span class="special">&lt;</span>
1741            <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span><span class="special">&lt;</span><span class="identifier">ForwardIterator</span><span class="special">&gt;::</span><span class="identifier">iterator_category</span><span class="special">,</span>
1742            <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward_iterator_tag</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">&gt;&gt;</span>
1743    <span class="identifier">iterator</span>
1744    <span class="identifier">insert</span><span class="special">(</span><span class="identifier">const_iterator</span> <span class="identifier">pos</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>
1745    <span class="special">{</span>
1746        <span class="keyword">auto</span> <span class="identifier">position</span> <span class="special">=</span> <span class="keyword">const_cast</span><span class="special">&lt;</span><span class="identifier">T</span> <span class="special">*&gt;(</span><span class="identifier">pos</span><span class="special">);</span>
1747        <span class="keyword">auto</span> <span class="keyword">const</span> <span class="identifier">insertions</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">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">);</span>
1748        <span class="identifier">assert</span><span class="special">(</span><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">size</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">insertions</span> <span class="special">&lt;</span> <span class="identifier">capacity</span><span class="special">());</span>
1749        <span class="identifier">uninitialized_generate</span><span class="special">(</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">end</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">insertions</span><span class="special">,</span> <span class="special">[]</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">T</span><span class="special">();</span> <span class="special">});</span>
1750        <span class="identifier">std</span><span class="special">::</span><span class="identifier">move_backward</span><span class="special">(</span><span class="identifier">position</span><span class="special">,</span> <span class="identifier">end</span><span class="special">(),</span> <span class="identifier">end</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">insertions</span><span class="special">);</span>
1751        <span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</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="identifier">position</span><span class="special">);</span>
1752        <span class="identifier">size_</span> <span class="special">+=</span> <span class="identifier">insertions</span><span class="special">;</span>
1753        <span class="keyword">return</span> <span class="identifier">position</span><span class="special">;</span>
1754    <span class="special">}</span>
1755    <span class="identifier">iterator</span> <span class="identifier">erase</span><span class="special">(</span><span class="identifier">const_iterator</span> <span class="identifier">f</span><span class="special">,</span> <span class="identifier">const_iterator</span> <span class="identifier">l</span><span class="special">)</span>
1756    <span class="special">{</span>
1757        <span class="keyword">auto</span> <span class="identifier">first</span> <span class="special">=</span> <span class="keyword">const_cast</span><span class="special">&lt;</span><span class="identifier">T</span> <span class="special">*&gt;(</span><span class="identifier">f</span><span class="special">);</span>
1758        <span class="keyword">auto</span> <span class="identifier">last</span> <span class="special">=</span> <span class="keyword">const_cast</span><span class="special">&lt;</span><span class="identifier">T</span> <span class="special">*&gt;(</span><span class="identifier">l</span><span class="special">);</span>
1759        <span class="keyword">auto</span> <span class="identifier">end_</span> <span class="special">=</span> <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">end</span><span class="special">();</span>
1760        <span class="keyword">auto</span> <span class="identifier">it</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">last</span><span class="special">,</span> <span class="identifier">end_</span><span class="special">,</span> <span class="identifier">first</span><span class="special">);</span>
1761        <span class="keyword">for</span> <span class="special">(;</span> <span class="identifier">it</span> <span class="special">!=</span> <span class="identifier">end_</span><span class="special">;</span> <span class="special">++</span><span class="identifier">it</span><span class="special">)</span> <span class="special">{</span>
1762            <span class="identifier">it</span><span class="special">-&gt;~</span><span class="identifier">T</span><span class="special">();</span>
1763        <span class="special">}</span>
1764        <span class="identifier">size_</span> <span class="special">-=</span> <span class="identifier">last</span> <span class="special">-</span> <span class="identifier">first</span><span class="special">;</span>
1765        <span class="keyword">return</span> <span class="identifier">first</span><span class="special">;</span>
1766    <span class="special">}</span>
1767    <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">static_vector</span> <span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span>
1768    <span class="special">{</span>
1769        <span class="identifier">size_type</span> <span class="identifier">short_size</span><span class="special">,</span> <span class="identifier">long_size</span><span class="special">;</span>
1770        <span class="identifier">std</span><span class="special">::</span><span class="identifier">tie</span><span class="special">(</span><span class="identifier">short_size</span><span class="special">,</span> <span class="identifier">long_size</span><span class="special">)</span> <span class="special">=</span>
1771            <span class="identifier">std</span><span class="special">::</span><span class="identifier">minmax</span><span class="special">(</span><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">size</span><span class="special">(),</span> <span class="identifier">other</span><span class="special">.</span><span class="identifier">size</span><span class="special">());</span>
1772        <span class="keyword">for</span> <span class="special">(</span><span class="keyword">auto</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">size_type</span><span class="special">(</span><span class="number">0</span><span class="special">);</span> <span class="identifier">i</span> <span class="special">&lt;</span> <span class="identifier">short_size</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> <span class="special">{</span>
1773            <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">swap</span><span class="special">;</span>
1774            <span class="identifier">swap</span><span class="special">((*</span><span class="keyword">this</span><span class="special">)[</span><span class="identifier">i</span><span class="special">],</span> <span class="identifier">other</span><span class="special">[</span><span class="identifier">i</span><span class="special">]);</span>
1775        <span class="special">}</span>
1776
1777        <span class="identifier">static_vector</span> <span class="special">*</span> <span class="identifier">longer</span> <span class="special">=</span> <span class="keyword">this</span><span class="special">;</span>
1778        <span class="identifier">static_vector</span> <span class="special">*</span> <span class="identifier">shorter</span> <span class="special">=</span> <span class="keyword">this</span><span class="special">;</span>
1779        <span class="keyword">if</span> <span class="special">(</span><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">size</span><span class="special">()</span> <span class="special">&lt;</span> <span class="identifier">other</span><span class="special">.</span><span class="identifier">size</span><span class="special">())</span>
1780            <span class="identifier">longer</span> <span class="special">=</span> <span class="special">&amp;</span><span class="identifier">other</span><span class="special">;</span>
1781        <span class="keyword">else</span>
1782            <span class="identifier">shorter</span> <span class="special">=</span> <span class="special">&amp;</span><span class="identifier">other</span><span class="special">;</span>
1783
1784        <span class="keyword">for</span> <span class="special">(</span><span class="keyword">auto</span> <span class="identifier">it</span> <span class="special">=</span> <span class="identifier">longer</span><span class="special">-&gt;</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">short_size</span><span class="special">,</span> <span class="identifier">last</span> <span class="special">=</span> <span class="identifier">longer</span><span class="special">-&gt;</span><span class="identifier">end</span><span class="special">();</span>
1785             <span class="identifier">it</span> <span class="special">!=</span> <span class="identifier">last</span><span class="special">;</span>
1786             <span class="special">++</span><span class="identifier">it</span><span class="special">)</span> <span class="special">{</span>
1787            <span class="identifier">shorter</span><span class="special">-&gt;</span><span class="identifier">emplace_back</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">it</span><span class="special">));</span>
1788        <span class="special">}</span>
1789
1790        <span class="identifier">longer</span><span class="special">-&gt;</span><span class="identifier">resize</span><span class="special">(</span><span class="identifier">short_size</span><span class="special">);</span>
1791        <span class="identifier">shorter</span><span class="special">-&gt;</span><span class="identifier">size_</span> <span class="special">=</span> <span class="identifier">long_size</span><span class="special">;</span>
1792    <span class="special">}</span>
1793
1794    <span class="comment">// Since we're getting so many overloads from</span>
1795    <span class="comment">// sequence_container_interface, and since many of those overloads are</span>
1796    <span class="comment">// implemented in terms of a user-defined function of the same name, we</span>
1797    <span class="comment">// need to add quite a few using declarations here.</span>
1798    <span class="keyword">using</span> <span class="identifier">base_type</span> <span class="special">=</span> <span class="identifier">sequence_container_interface</span><span class="special">&lt;</span>
1799        <span class="identifier">static_vector</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">N</span><span class="special">&gt;,</span>
1800        <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stl_interfaces</span><span class="special">::</span><span class="identifier">element_layout</span><span class="special">::</span><span class="identifier">contiguous</span><span class="special">&gt;;</span>
1801    <span class="keyword">using</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">begin</span><span class="special">;</span>
1802    <span class="keyword">using</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">end</span><span class="special">;</span>
1803    <span class="keyword">using</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">insert</span><span class="special">;</span>
1804    <span class="keyword">using</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">erase</span><span class="special">;</span>
1805
1806    <span class="comment">// comparisons (skipped 6)</span>
1807
1808<span class="keyword">private</span><span class="special">:</span>
1809    <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
1810    <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">uninitialized_generate</span><span class="special">(</span><span class="identifier">iterator</span> <span class="identifier">f</span><span class="special">,</span> <span class="identifier">iterator</span> <span class="identifier">l</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">func</span><span class="special">)</span>
1811    <span class="special">{</span>
1812        <span class="keyword">for</span> <span class="special">(;</span> <span class="identifier">f</span> <span class="special">!=</span> <span class="identifier">l</span><span class="special">;</span> <span class="special">++</span><span class="identifier">f</span><span class="special">)</span> <span class="special">{</span>
1813            <span class="keyword">new</span> <span class="special">(</span><span class="keyword">static_cast</span><span class="special">&lt;</span><span class="keyword">void</span> <span class="special">*&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">addressof</span><span class="special">(*</span><span class="identifier">f</span><span class="special">)))</span> <span class="identifier">T</span><span class="special">(</span><span class="identifier">func</span><span class="special">());</span>
1814        <span class="special">}</span>
1815    <span class="special">}</span>
1816    <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
1817    <span class="keyword">void</span> <span class="identifier">resize_impl</span><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">sz</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">func</span><span class="special">)</span> <span class="keyword">noexcept</span>
1818    <span class="special">{</span>
1819        <span class="identifier">assert</span><span class="special">(</span><span class="identifier">sz</span> <span class="special">&lt;</span> <span class="identifier">capacity</span><span class="special">());</span>
1820        <span class="keyword">if</span> <span class="special">(</span><span class="identifier">sz</span> <span class="special">&lt;</span> <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">size</span><span class="special">())</span>
1821            <span class="identifier">erase</span><span class="special">(</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">sz</span><span class="special">,</span> <span class="identifier">end</span><span class="special">());</span>
1822        <span class="keyword">if</span> <span class="special">(</span><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">size</span><span class="special">()</span> <span class="special">&lt;</span> <span class="identifier">sz</span><span class="special">)</span>
1823            <span class="identifier">uninitialized_generate</span><span class="special">(</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">sz</span><span class="special">,</span> <span class="identifier">func</span><span class="special">);</span>
1824        <span class="identifier">size_</span> <span class="special">=</span> <span class="identifier">sz</span><span class="special">;</span>
1825    <span class="special">}</span>
1826
1827    <span class="keyword">alignas</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <span class="identifier">buf_</span><span class="special">[</span><span class="identifier">N</span> <span class="special">*</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">T</span><span class="special">)];</span>
1828    <span class="identifier">size_type</span> <span class="identifier">size_</span><span class="special">;</span>
1829<span class="special">};</span>
1830</pre>
1831<p>
1832    </p>
1833<p>
1834      That's quite a bit of code. However, by using <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>,
1835      we were able to write only 22 functions, and let <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
1836      provide the other 39. 9 of the 22 function that we did have to write were constructors
1837      and special member functions, and those always have to be written in the derived
1838      class; <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
1839      never could have helped with those.
1840    </p>
1841<div class="note"><table border="0" summary="Note">
1842<tr>
1843<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td>
1844<th align="left">Note</th>
1845</tr>
1846<tr><td align="left" valign="top"><p>
1847        <code class="computeroutput"><a class="link" href="../boost/stl_interfaces/v1/sequ_1_3_39_11_2_5_1_1_1_1.html" title="Struct template sequence_container_interface">sequence_container_interface</a></code>
1848        does not support all the sets of container requirements in the standard.
1849        In particular, it does not support the allocator-aware requirements, and
1850        it does not support the associative or unordered associative container requirements.
1851      </p></td></tr>
1852</table></div>
1853</div>
1854<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
1855<td align="left"></td>
1856<td align="right"><div class="copyright-footer">Copyright © 2019 T. Zachary Laine<p>
1857        Distributed under the Boost Software License, Version 1.0. (See accompanying
1858        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>)
1859      </p>
1860</div></td>
1861</tr></table>
1862<hr>
1863<div class="spirit-nav">
1864<a accesskey="p" href="tutorial___view_interface_.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../stl_interfaces.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="tutorial___reverse_iterator_.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
1865</div>
1866</body>
1867</html>
1868