| 1 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | 
|---|
| 2 |  | 
|---|
| 3 | <html> | 
|---|
| 4 | <head> | 
|---|
| 5 |   <meta http-equiv="Content-Language" content="en-us"> | 
|---|
| 6 |   <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> | 
|---|
| 7 |  | 
|---|
| 8 |   <title>Collection</title> | 
|---|
| 9 | </head> | 
|---|
| 10 |  | 
|---|
| 11 | <body bgcolor="#FFFFFF" link="#0000EE" text="#000000" vlink="#551A8B" alink= | 
|---|
| 12 | "#FF0000"> | 
|---|
| 13 |   <h1><img src="../../boost.png" alt="boost logo" width="277" align="middle" | 
|---|
| 14 |   height="86"><br> | 
|---|
| 15 |   Collection</h1> | 
|---|
| 16 |  | 
|---|
| 17 |   <h3>Description</h3> | 
|---|
| 18 |  | 
|---|
| 19 |   <p>A Collection is a <i>concept</i> similar to the STL <a href= | 
|---|
| 20 |   "http://www.sgi.com/tech/stl/Container.html">Container</a> concept. A | 
|---|
| 21 |   Collection provides iterators for accessing a range of elements and | 
|---|
| 22 |   provides information about the number of elements in the Collection. | 
|---|
| 23 |   However, a Collection has fewer requirements than a Container. The | 
|---|
| 24 |   motivation for the Collection concept is that there are many useful | 
|---|
| 25 |   Container-like types that do not meet the full requirements of Container, | 
|---|
| 26 |   and many algorithms that can be written with this reduced set of | 
|---|
| 27 |   requirements. To summarize the reduction in requirements:</p> | 
|---|
| 28 |  | 
|---|
| 29 |   <ul> | 
|---|
| 30 |     <li>It is not required to "own" its elements: the lifetime of an element | 
|---|
| 31 |     in a Collection does not have to match the lifetime of the Collection | 
|---|
| 32 |     object, though the lifetime of the element should cover the lifetime of | 
|---|
| 33 |     the Collection object.</li> | 
|---|
| 34 |  | 
|---|
| 35 |     <li>The semantics of copying a Collection object is not defined (it could | 
|---|
| 36 |     be a deep or shallow copy or not even support copying).</li> | 
|---|
| 37 |  | 
|---|
| 38 |     <li>The associated reference type of a Collection does not have to be a | 
|---|
| 39 |     real C++ reference.</li> | 
|---|
| 40 |   </ul>Because of the reduced requirements, some care must be taken when | 
|---|
| 41 |   writing code that is meant to be generic for all Collection types. In | 
|---|
| 42 |   particular, a Collection object should be passed by-reference since | 
|---|
| 43 |   assumptions can not be made about the behaviour of the copy constructor. | 
|---|
| 44 |  | 
|---|
| 45 |   <h3>Associated types</h3> | 
|---|
| 46 |  | 
|---|
| 47 |   <table border summary=""> | 
|---|
| 48 |     <tr> | 
|---|
| 49 |       <td valign="top">Value type</td> | 
|---|
| 50 |  | 
|---|
| 51 |       <td valign="top"><tt>X::value_type</tt></td> | 
|---|
| 52 |  | 
|---|
| 53 |       <td valign="top">The type of the object stored in a Collection. If the | 
|---|
| 54 |       Collection is <i>mutable</i> then the value type must be <a href= | 
|---|
| 55 |       "http://www.sgi.com/tech/stl/Assignable.html">Assignable</a>. Otherwise | 
|---|
| 56 |       the value type must be <a href= | 
|---|
| 57 |       "./CopyConstructible.html">CopyConstructible</a>.</td> | 
|---|
| 58 |     </tr> | 
|---|
| 59 |  | 
|---|
| 60 |     <tr> | 
|---|
| 61 |       <td valign="top">Iterator type</td> | 
|---|
| 62 |  | 
|---|
| 63 |       <td valign="top"><tt>X::iterator</tt></td> | 
|---|
| 64 |  | 
|---|
| 65 |       <td valign="top">The type of iterator used to iterate through a | 
|---|
| 66 |       Collection's elements. The iterator's value type is expected to be the | 
|---|
| 67 |       Collection's value type. A conversion from the iterator type to the | 
|---|
| 68 |       const iterator type must exist. The iterator type must be an <a href= | 
|---|
| 69 |       "http://www.sgi.com/tech/stl/InputIterator.html">InputIterator</a>.</td> | 
|---|
| 70 |     </tr> | 
|---|
| 71 |  | 
|---|
| 72 |     <tr> | 
|---|
| 73 |       <td valign="top">Const iterator type</td> | 
|---|
| 74 |  | 
|---|
| 75 |       <td valign="top"><tt>X::const_iterator</tt></td> | 
|---|
| 76 |  | 
|---|
| 77 |       <td valign="top">A type of iterator that may be used to examine, but | 
|---|
| 78 |       not to modify, a Collection's elements.</td> | 
|---|
| 79 |     </tr> | 
|---|
| 80 |  | 
|---|
| 81 |     <tr> | 
|---|
| 82 |       <td valign="top">Reference type</td> | 
|---|
| 83 |  | 
|---|
| 84 |       <td valign="top"><tt>X::reference</tt></td> | 
|---|
| 85 |  | 
|---|
| 86 |       <td valign="top">A type that behaves like a reference to the | 
|---|
| 87 |       Collection's value type. <a href="#n1">[1]</a></td> | 
|---|
| 88 |     </tr> | 
|---|
| 89 |  | 
|---|
| 90 |     <tr> | 
|---|
| 91 |       <td valign="top">Const reference type</td> | 
|---|
| 92 |  | 
|---|
| 93 |       <td valign="top"><tt>X::const_reference</tt></td> | 
|---|
| 94 |  | 
|---|
| 95 |       <td valign="top">A type that behaves like a const reference to the | 
|---|
| 96 |       Collection's value type.</td> | 
|---|
| 97 |     </tr> | 
|---|
| 98 |  | 
|---|
| 99 |     <tr> | 
|---|
| 100 |       <td valign="top">Pointer type</td> | 
|---|
| 101 |  | 
|---|
| 102 |       <td valign="top"><tt>X::pointer</tt></td> | 
|---|
| 103 |  | 
|---|
| 104 |       <td valign="top">A type that behaves as a pointer to the Collection's | 
|---|
| 105 |       value type.</td> | 
|---|
| 106 |     </tr> | 
|---|
| 107 |  | 
|---|
| 108 |     <tr> | 
|---|
| 109 |       <td valign="top">Distance type</td> | 
|---|
| 110 |  | 
|---|
| 111 |       <td valign="top"><tt>X::difference_type</tt></td> | 
|---|
| 112 |  | 
|---|
| 113 |       <td valign="top">A signed integral type used to represent the distance | 
|---|
| 114 |       between two of the Collection's iterators. This type must be the same | 
|---|
| 115 |       as the iterator's distance type.</td> | 
|---|
| 116 |     </tr> | 
|---|
| 117 |  | 
|---|
| 118 |     <tr> | 
|---|
| 119 |       <td valign="top">Size type</td> | 
|---|
| 120 |  | 
|---|
| 121 |       <td valign="top"><tt>X::size_type</tt></td> | 
|---|
| 122 |  | 
|---|
| 123 |       <td valign="top">An unsigned integral type that can represent any | 
|---|
| 124 |       nonnegative value of the Collection's distance type.</td> | 
|---|
| 125 |     </tr> | 
|---|
| 126 |   </table> | 
|---|
| 127 |  | 
|---|
| 128 |   <h3>Notation</h3> | 
|---|
| 129 |  | 
|---|
| 130 |   <table summary=""> | 
|---|
| 131 |     <tr> | 
|---|
| 132 |       <td valign="top"><tt>X</tt></td> | 
|---|
| 133 |  | 
|---|
| 134 |       <td valign="top">A type that is a model of Collection.</td> | 
|---|
| 135 |     </tr> | 
|---|
| 136 |  | 
|---|
| 137 |     <tr> | 
|---|
| 138 |       <td valign="top"><tt>a</tt>, <tt>b</tt></td> | 
|---|
| 139 |  | 
|---|
| 140 |       <td valign="top">Object of type <tt>X</tt>.</td> | 
|---|
| 141 |     </tr> | 
|---|
| 142 |  | 
|---|
| 143 |     <tr> | 
|---|
| 144 |       <td valign="top"><tt>T</tt></td> | 
|---|
| 145 |  | 
|---|
| 146 |       <td valign="top">The value type of <tt>X</tt>.</td> | 
|---|
| 147 |     </tr> | 
|---|
| 148 |   </table> | 
|---|
| 149 |  | 
|---|
| 150 |   <h3>Valid expressions</h3> | 
|---|
| 151 |  | 
|---|
| 152 |   <p>The following expressions must be valid.</p> | 
|---|
| 153 |  | 
|---|
| 154 |   <table border summary=""> | 
|---|
| 155 |     <tr> | 
|---|
| 156 |       <th>Name</th> | 
|---|
| 157 |  | 
|---|
| 158 |       <th>Expression</th> | 
|---|
| 159 |  | 
|---|
| 160 |       <th>Return type</th> | 
|---|
| 161 |     </tr> | 
|---|
| 162 |  | 
|---|
| 163 |     <tr> | 
|---|
| 164 |       <td valign="top">Beginning of range</td> | 
|---|
| 165 |  | 
|---|
| 166 |       <td valign="top"><tt>a.begin()</tt></td> | 
|---|
| 167 |  | 
|---|
| 168 |       <td valign="top"><tt>iterator</tt> if <tt>a</tt> is mutable, | 
|---|
| 169 |       <tt>const_iterator</tt> otherwise</td> | 
|---|
| 170 |     </tr> | 
|---|
| 171 |  | 
|---|
| 172 |     <tr> | 
|---|
| 173 |       <td valign="top">End of range</td> | 
|---|
| 174 |  | 
|---|
| 175 |       <td valign="top"><tt>a.end()</tt></td> | 
|---|
| 176 |  | 
|---|
| 177 |       <td valign="top"><tt>iterator</tt> if <tt>a</tt> is mutable, | 
|---|
| 178 |       <tt>const_iterator</tt> otherwise</td> | 
|---|
| 179 |     </tr> | 
|---|
| 180 |  | 
|---|
| 181 |     <tr> | 
|---|
| 182 |       <td valign="top">Size</td> | 
|---|
| 183 |  | 
|---|
| 184 |       <td valign="top"><tt>a.size()</tt></td> | 
|---|
| 185 |  | 
|---|
| 186 |       <td valign="top"><tt>size_type</tt></td> | 
|---|
| 187 |     </tr><!-- | 
|---|
| 188 | <TR> | 
|---|
| 189 | <TD VAlign=top> | 
|---|
| 190 | Maximum size | 
|---|
| 191 | </TD> | 
|---|
| 192 | <TD VAlign=top> | 
|---|
| 193 | <tt>a.max_size()</tt> | 
|---|
| 194 | </TD> | 
|---|
| 195 | <TD VAlign=top> | 
|---|
| 196 | <tt>size_type</tt> | 
|---|
| 197 | </TD> | 
|---|
| 198 | </TR> | 
|---|
| 199 | --> | 
|---|
| 200 |  | 
|---|
| 201 |     <tr> | 
|---|
| 202 |       <td valign="top">Empty Collection</td> | 
|---|
| 203 |  | 
|---|
| 204 |       <td valign="top"><tt>a.empty()</tt></td> | 
|---|
| 205 |  | 
|---|
| 206 |       <td valign="top">Convertible to <tt>bool</tt></td> | 
|---|
| 207 |     </tr> | 
|---|
| 208 |  | 
|---|
| 209 |     <tr> | 
|---|
| 210 |       <td valign="top">Swap</td> | 
|---|
| 211 |  | 
|---|
| 212 |       <td valign="top"><tt>a.swap(b)</tt></td> | 
|---|
| 213 |  | 
|---|
| 214 |       <td valign="top"><tt>void</tt></td> | 
|---|
| 215 |     </tr> | 
|---|
| 216 |   </table> | 
|---|
| 217 |  | 
|---|
| 218 |   <h3>Expression semantics</h3> | 
|---|
| 219 |  | 
|---|
| 220 |   <table border summary=""> | 
|---|
| 221 |     <tr> | 
|---|
| 222 |       <th>Name</th> | 
|---|
| 223 |  | 
|---|
| 224 |       <th>Expression</th> | 
|---|
| 225 |  | 
|---|
| 226 |       <th>Semantics</th> | 
|---|
| 227 |  | 
|---|
| 228 |       <th>Postcondition</th> | 
|---|
| 229 |     </tr> | 
|---|
| 230 |  | 
|---|
| 231 |     <tr> | 
|---|
| 232 |       <td valign="top">Beginning of range</td> | 
|---|
| 233 |  | 
|---|
| 234 |       <td valign="top"><tt>a.begin()</tt></td> | 
|---|
| 235 |  | 
|---|
| 236 |       <td valign="top">Returns an iterator pointing to the first element in | 
|---|
| 237 |       the Collection.</td> | 
|---|
| 238 |  | 
|---|
| 239 |       <td valign="top"><tt>a.begin()</tt> is either dereferenceable or | 
|---|
| 240 |       past-the-end. It is past-the-end if and only if <tt>a.size() == | 
|---|
| 241 |       0</tt>.</td> | 
|---|
| 242 |     </tr> | 
|---|
| 243 |  | 
|---|
| 244 |     <tr> | 
|---|
| 245 |       <td valign="top">End of range</td> | 
|---|
| 246 |  | 
|---|
| 247 |       <td valign="top"><tt>a.end()</tt></td> | 
|---|
| 248 |  | 
|---|
| 249 |       <td valign="top">Returns an iterator pointing one past the last element | 
|---|
| 250 |       in the Collection.</td> | 
|---|
| 251 |  | 
|---|
| 252 |       <td valign="top"><tt>a.end()</tt> is past-the-end.</td> | 
|---|
| 253 |     </tr> | 
|---|
| 254 |  | 
|---|
| 255 |     <tr> | 
|---|
| 256 |       <td valign="top">Size</td> | 
|---|
| 257 |  | 
|---|
| 258 |       <td valign="top"><tt>a.size()</tt></td> | 
|---|
| 259 |  | 
|---|
| 260 |       <td valign="top">Returns the size of the Collection, that is, its | 
|---|
| 261 |       number of elements.</td> | 
|---|
| 262 |  | 
|---|
| 263 |       <td valign="top"><tt>a.size() >= 0</tt></td> | 
|---|
| 264 |     </tr><!-- | 
|---|
| 265 | <TR> | 
|---|
| 266 | <TD VAlign=top> | 
|---|
| 267 | Maximum size | 
|---|
| 268 | </TD> | 
|---|
| 269 | <TD VAlign=top> | 
|---|
| 270 | <tt>a.max_size()</tt> | 
|---|
| 271 | </TD> | 
|---|
| 272 | <TD VAlign=top> | 
|---|
| 273 |   | 
|---|
| 274 | </TD> | 
|---|
| 275 | <TD VAlign=top> | 
|---|
| 276 | Returns the largest size that this Collection can ever have. <A href="#8">[8]</A> | 
|---|
| 277 | </TD> | 
|---|
| 278 | <TD VAlign=top> | 
|---|
| 279 | <tt>a.max_size() >= 0 && a.max_size() >= a.size()</tt> | 
|---|
| 280 | </TD> | 
|---|
| 281 | </TR> | 
|---|
| 282 |  --> | 
|---|
| 283 |  | 
|---|
| 284 |     <tr> | 
|---|
| 285 |       <td valign="top">Empty Collection</td> | 
|---|
| 286 |  | 
|---|
| 287 |       <td valign="top"><tt>a.empty()</tt></td> | 
|---|
| 288 |  | 
|---|
| 289 |       <td valign="top">Equivalent to <tt>a.size() == 0</tt>. (But possibly | 
|---|
| 290 |       faster.)</td> | 
|---|
| 291 |  | 
|---|
| 292 |       <td valign="top"> </td> | 
|---|
| 293 |     </tr> | 
|---|
| 294 |  | 
|---|
| 295 |     <tr> | 
|---|
| 296 |       <td valign="top">Swap</td> | 
|---|
| 297 |  | 
|---|
| 298 |       <td valign="top"><tt>a.swap(b)</tt></td> | 
|---|
| 299 |  | 
|---|
| 300 |       <td valign="top">Equivalent to <tt>swap(a,b)</tt></td> | 
|---|
| 301 |  | 
|---|
| 302 |       <td valign="top"> </td> | 
|---|
| 303 |     </tr> | 
|---|
| 304 |   </table> | 
|---|
| 305 |  | 
|---|
| 306 |   <h3>Complexity guarantees</h3> | 
|---|
| 307 |  | 
|---|
| 308 |   <p><tt>begin()</tt> and <tt>end()</tt> are amortized constant time.</p> | 
|---|
| 309 |  | 
|---|
| 310 |   <p><tt>size()</tt> is at most linear in the Collection's size. | 
|---|
| 311 |   <tt>empty()</tt> is amortized constant time.</p> | 
|---|
| 312 |  | 
|---|
| 313 |   <p><tt>swap()</tt> is at most linear in the size of the two | 
|---|
| 314 |   collections.</p> | 
|---|
| 315 |  | 
|---|
| 316 |   <h3>Invariants</h3> | 
|---|
| 317 |  | 
|---|
| 318 |   <table border summary=""> | 
|---|
| 319 |     <tr> | 
|---|
| 320 |       <td valign="top">Valid range</td> | 
|---|
| 321 |  | 
|---|
| 322 |       <td valign="top">For any Collection <tt>a</tt>, <tt>[a.begin(), | 
|---|
| 323 |       a.end())</tt> is a valid range.</td> | 
|---|
| 324 |     </tr> | 
|---|
| 325 |  | 
|---|
| 326 |     <tr> | 
|---|
| 327 |       <td valign="top">Range size</td> | 
|---|
| 328 |  | 
|---|
| 329 |       <td valign="top"><tt>a.size()</tt> is equal to the distance from | 
|---|
| 330 |       <tt>a.begin()</tt> to <tt>a.end()</tt>.</td> | 
|---|
| 331 |     </tr> | 
|---|
| 332 |  | 
|---|
| 333 |     <tr> | 
|---|
| 334 |       <td valign="top">Completeness</td> | 
|---|
| 335 |  | 
|---|
| 336 |       <td valign="top">An algorithm that iterates through the range | 
|---|
| 337 |       <tt>[a.begin(), a.end())</tt> will pass through every element of | 
|---|
| 338 |       <tt>a</tt>.</td> | 
|---|
| 339 |     </tr> | 
|---|
| 340 |   </table> | 
|---|
| 341 |  | 
|---|
| 342 |   <h3>Models</h3> | 
|---|
| 343 |  | 
|---|
| 344 |   <ul> | 
|---|
| 345 |     <li><tt>array</tt></li> | 
|---|
| 346 |  | 
|---|
| 347 |     <li><tt>array_ptr</tt></li> | 
|---|
| 348 |  | 
|---|
| 349 |     <li><tt>vector<bool></tt></li> | 
|---|
| 350 |   </ul> | 
|---|
| 351 |  | 
|---|
| 352 |   <h3>Collection Refinements</h3> | 
|---|
| 353 |  | 
|---|
| 354 |   <p>There are quite a few concepts that refine the Collection concept, | 
|---|
| 355 |   similar to the concepts that refine the Container concept. Here is a brief | 
|---|
| 356 |   overview of the refining concepts.</p> | 
|---|
| 357 |  | 
|---|
| 358 |   <h4>ForwardCollection</h4> | 
|---|
| 359 |  | 
|---|
| 360 |   <p>The elements are arranged in some order that does not change | 
|---|
| 361 |   spontaneously from one iteration to the next. As a result, a | 
|---|
| 362 |   ForwardCollection is <a href= | 
|---|
| 363 |   "http://www.sgi.com/tech/stl/EqualityComparable.html">EqualityComparable</a> | 
|---|
| 364 |   and <a href= | 
|---|
| 365 |   "http://www.sgi.com/tech/stl/LessThanComparable.html">LessThanComparable</a>. | 
|---|
| 366 |   In addition, the iterator type of a ForwardCollection is a | 
|---|
| 367 |   MultiPassInputIterator which is just an InputIterator with the added | 
|---|
| 368 |   requirements that the iterator can be used to make multiple passes through | 
|---|
| 369 |   a range, and that if <tt>it1 == it2</tt> and <tt>it1</tt> is | 
|---|
| 370 |   dereferenceable then <tt>++it1 == ++it2</tt>. The ForwardCollection also | 
|---|
| 371 |   has a <tt>front()</tt> method.</p> | 
|---|
| 372 |  | 
|---|
| 373 |   <table border summary=""> | 
|---|
| 374 |     <tr> | 
|---|
| 375 |       <th>Name</th> | 
|---|
| 376 |  | 
|---|
| 377 |       <th>Expression</th> | 
|---|
| 378 |  | 
|---|
| 379 |       <th>Return type</th> | 
|---|
| 380 |  | 
|---|
| 381 |       <th>Semantics</th> | 
|---|
| 382 |     </tr> | 
|---|
| 383 |  | 
|---|
| 384 |     <tr> | 
|---|
| 385 |       <td valign="top">Front</td> | 
|---|
| 386 |  | 
|---|
| 387 |       <td valign="top"><tt>a.front()</tt></td> | 
|---|
| 388 |  | 
|---|
| 389 |       <td valign="top"><tt>reference</tt> if <tt>a</tt> is mutable,<br> | 
|---|
| 390 |       <tt>const_reference</tt> otherwise.</td> | 
|---|
| 391 |  | 
|---|
| 392 |       <td valign="top">Equivalent to <tt>*(a.begin())</tt>.</td> | 
|---|
| 393 |     </tr> | 
|---|
| 394 |   </table> | 
|---|
| 395 |  | 
|---|
| 396 |   <h4>ReversibleCollection</h4> | 
|---|
| 397 |  | 
|---|
| 398 |   <p>The container provides access to iterators that traverse in both | 
|---|
| 399 |   directions (forward and reverse). The iterator type must meet all of the | 
|---|
| 400 |   requirements of <a href= | 
|---|
| 401 |   "http://www.sgi.com/tech/stl/BidirectionalIterator.html">BidirectionalIterator</a> | 
|---|
| 402 |   except that the reference type does not have to be a real C++ reference. | 
|---|
| 403 |   The ReversibleCollection adds the following requirements to those of | 
|---|
| 404 |   ForwardCollection.</p> | 
|---|
| 405 |  | 
|---|
| 406 |   <table border summary=""> | 
|---|
| 407 |     <tr> | 
|---|
| 408 |       <th>Name</th> | 
|---|
| 409 |  | 
|---|
| 410 |       <th>Expression</th> | 
|---|
| 411 |  | 
|---|
| 412 |       <th>Return type</th> | 
|---|
| 413 |  | 
|---|
| 414 |       <th>Semantics</th> | 
|---|
| 415 |     </tr> | 
|---|
| 416 |  | 
|---|
| 417 |     <tr> | 
|---|
| 418 |       <td valign="top">Beginning of range</td> | 
|---|
| 419 |  | 
|---|
| 420 |       <td valign="top"><tt>a.rbegin()</tt></td> | 
|---|
| 421 |  | 
|---|
| 422 |       <td valign="top"><tt>reverse_iterator</tt> if <tt>a</tt> is mutable, | 
|---|
| 423 |       <tt>const_reverse_iterator</tt> otherwise.</td> | 
|---|
| 424 |  | 
|---|
| 425 |       <td valign="top">Equivalent to | 
|---|
| 426 |       <tt>X::reverse_iterator(a.end())</tt>.</td> | 
|---|
| 427 |     </tr> | 
|---|
| 428 |  | 
|---|
| 429 |     <tr> | 
|---|
| 430 |       <td valign="top">End of range</td> | 
|---|
| 431 |  | 
|---|
| 432 |       <td valign="top"><tt>a.rend()</tt></td> | 
|---|
| 433 |  | 
|---|
| 434 |       <td valign="top"><tt>reverse_iterator</tt> if <tt>a</tt> is mutable, | 
|---|
| 435 |       <tt>const_reverse_iterator</tt> otherwise.</td> | 
|---|
| 436 |  | 
|---|
| 437 |       <td valign="top">Equivalent to | 
|---|
| 438 |       <tt>X::reverse_iterator(a.begin())</tt>.</td> | 
|---|
| 439 |     </tr> | 
|---|
| 440 |  | 
|---|
| 441 |     <tr> | 
|---|
| 442 |       <td valign="top">Back</td> | 
|---|
| 443 |  | 
|---|
| 444 |       <td valign="top"><tt>a.back()</tt></td> | 
|---|
| 445 |  | 
|---|
| 446 |       <td valign="top"><tt>reference</tt> if <tt>a</tt> is mutable,<br> | 
|---|
| 447 |       <tt>const_reference</tt> otherwise.</td> | 
|---|
| 448 |  | 
|---|
| 449 |       <td valign="top">Equivalent to <tt>*(--a.end())</tt>.</td> | 
|---|
| 450 |     </tr> | 
|---|
| 451 |   </table> | 
|---|
| 452 |  | 
|---|
| 453 |   <h4>SequentialCollection</h4> | 
|---|
| 454 |  | 
|---|
| 455 |   <p>The elements are arranged in a strict linear order. No extra methods are | 
|---|
| 456 |   required.</p> | 
|---|
| 457 |  | 
|---|
| 458 |   <h4>RandomAccessCollection</h4> | 
|---|
| 459 |  | 
|---|
| 460 |   <p>The iterators of a RandomAccessCollection satisfy all of the | 
|---|
| 461 |   requirements of <a href= | 
|---|
| 462 |   "http://www.sgi.com/tech/stl/RandomAccessIterator.html">RandomAccessIterator</a> | 
|---|
| 463 |   except that the reference type does not have to be a real C++ reference. In | 
|---|
| 464 |   addition, a RandomAccessCollection provides an element access operator.</p> | 
|---|
| 465 |  | 
|---|
| 466 |   <table border summary=""> | 
|---|
| 467 |     <tr> | 
|---|
| 468 |       <th>Name</th> | 
|---|
| 469 |  | 
|---|
| 470 |       <th>Expression</th> | 
|---|
| 471 |  | 
|---|
| 472 |       <th>Return type</th> | 
|---|
| 473 |  | 
|---|
| 474 |       <th>Semantics</th> | 
|---|
| 475 |     </tr> | 
|---|
| 476 |  | 
|---|
| 477 |     <tr> | 
|---|
| 478 |       <td valign="top">Element Access</td> | 
|---|
| 479 |  | 
|---|
| 480 |       <td valign="top"><tt>a[n]</tt></td> | 
|---|
| 481 |  | 
|---|
| 482 |       <td valign="top"><tt>reference</tt> if <tt>a</tt> is mutable, | 
|---|
| 483 |       <tt>const_reference</tt> otherwise.</td> | 
|---|
| 484 |  | 
|---|
| 485 |       <td valign="top">Returns the nth element of the Collection. <tt>n</tt> | 
|---|
| 486 |       must be convertible to <tt>size_type</tt>. Precondition: <tt>0 <= n | 
|---|
| 487 |       < a.size()</tt>.</td> | 
|---|
| 488 |     </tr> | 
|---|
| 489 |   </table> | 
|---|
| 490 |  | 
|---|
| 491 |   <h3>Notes</h3> | 
|---|
| 492 |  | 
|---|
| 493 |   <p><a name="n1" id="n1">[1]</a> The reference type does not have to be a | 
|---|
| 494 |   real C++ reference. The requirements of the reference type depend on the | 
|---|
| 495 |   context within which the Collection is being used. Specifically it depends | 
|---|
| 496 |   on the requirements the context places on the value type of the Collection. | 
|---|
| 497 |   The reference type of the Collection must meet the same requirements as the | 
|---|
| 498 |   value type. In addition, the reference objects must be equivalent to the | 
|---|
| 499 |   value type objects in the collection (which is trivially true if they are | 
|---|
| 500 |   the same object). Also, in a mutable Collection, an assignment to the | 
|---|
| 501 |   reference object must result in an assignment to the object in the | 
|---|
| 502 |   Collection (again, which is trivially true if they are the same object, but | 
|---|
| 503 |   non-trivial if the reference type is a proxy class).</p> | 
|---|
| 504 |  | 
|---|
| 505 |   <h3>See also</h3> | 
|---|
| 506 |  | 
|---|
| 507 |   <p><a href= | 
|---|
| 508 |   "http://www.sgi.com/tech/stl/Container.html">Container</a><br></p> | 
|---|
| 509 |   <hr> | 
|---|
| 510 |  | 
|---|
| 511 |   <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= | 
|---|
| 512 |   "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" | 
|---|
| 513 |   height="31" width="88"></a></p> | 
|---|
| 514 |  | 
|---|
| 515 |   <p>Revised  | 
|---|
| 516 |   <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->05 | 
|---|
| 517 |   December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38516" --></p> | 
|---|
| 518 |  | 
|---|
| 519 |   <table summary=""> | 
|---|
| 520 |     <tr valign="top"> | 
|---|
| 521 |       <td nowrap><i>Copyright © 2000</i></td> | 
|---|
| 522 |  | 
|---|
| 523 |       <td><i><a href="http://www.boost.org/people/jeremy_siek.htm">Jeremy | 
|---|
| 524 |       Siek</a>, Univ.of Notre Dame and C++ Library & Compiler Group/SGI | 
|---|
| 525 |       (<a href="mailto:jsiek@engr.sgi.com">jsiek@engr.sgi.com</a>)</i></td> | 
|---|
| 526 |     </tr> | 
|---|
| 527 |   </table> | 
|---|
| 528 |  | 
|---|
| 529 |   <p><i>Distributed under the Boost Software License, Version 1.0. (See | 
|---|
| 530 |   accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or | 
|---|
| 531 |   copy at <a href= | 
|---|
| 532 |   "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> | 
|---|
| 533 | </body> | 
|---|
| 534 | </html> | 
|---|