RandomAccessTraversal.html 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
  7. <title>Random Access Traversal Concept</title>
  8. <link rel="stylesheet" href="../../../rst.css" type="text/css" />
  9. </head>
  10. <body>
  11. <div class="document" id="random-access-traversal-concept">
  12. <h1 class="title">Random Access Traversal Concept</h1>
  13. <!-- Copyright David Abrahams 2006. Distributed under the Boost -->
  14. <!-- Software License, Version 1.0. (See accompanying -->
  15. <!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
  16. <p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Random Access Traversal</em>
  17. concept if the following expressions are valid and respect the stated
  18. semantics. In the table below, <tt class="docutils literal"><span class="pre">Distance</span></tt> is
  19. <tt class="docutils literal"><span class="pre">iterator_traits&lt;X&gt;::difference_type</span></tt> and <tt class="docutils literal"><span class="pre">n</span></tt> represents a
  20. constant object of type <tt class="docutils literal"><span class="pre">Distance</span></tt>.</p>
  21. <table border="1" class="docutils">
  22. <colgroup>
  23. <col width="28%" />
  24. <col width="30%" />
  25. <col width="23%" />
  26. <col width="20%" />
  27. </colgroup>
  28. <thead valign="bottom">
  29. <tr><th class="head" colspan="4">Random Access Traversal Iterator Requirements (in addition to Bidirectional Traversal)</th>
  30. </tr>
  31. <tr><th class="head">Expression</th>
  32. <th class="head">Return Type</th>
  33. <th class="head">Operational Semantics</th>
  34. <th class="head">Assertion/
  35. Precondition</th>
  36. </tr>
  37. </thead>
  38. <tbody valign="top">
  39. <tr><td><tt class="docutils literal"><span class="pre">r</span> <span class="pre">+=</span> <span class="pre">n</span></tt></td>
  40. <td><tt class="docutils literal"><span class="pre">X&amp;</span></tt></td>
  41. <td><pre class="first last literal-block">
  42. {
  43. Distance m = n;
  44. if (m &gt;= 0)
  45. while (m--)
  46. ++r;
  47. else
  48. while (m++)
  49. --r;
  50. return r;
  51. }
  52. </pre>
  53. </td>
  54. <td>&nbsp;</td>
  55. </tr>
  56. <tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre">+</span> <span class="pre">n</span></tt>, <tt class="docutils literal"><span class="pre">n</span> <span class="pre">+</span> <span class="pre">a</span></tt></td>
  57. <td><tt class="docutils literal"><span class="pre">X</span></tt></td>
  58. <td><tt class="docutils literal"><span class="pre">{</span> <span class="pre">X</span> <span class="pre">tmp</span> <span class="pre">=</span> <span class="pre">a;</span> <span class="pre">return</span> <span class="pre">tmp</span>
  59. <span class="pre">+=</span> <span class="pre">n;</span> <span class="pre">}</span></tt></td>
  60. <td>&nbsp;</td>
  61. </tr>
  62. <tr><td><tt class="docutils literal"><span class="pre">r</span> <span class="pre">-=</span> <span class="pre">n</span></tt></td>
  63. <td><tt class="docutils literal"><span class="pre">X&amp;</span></tt></td>
  64. <td><tt class="docutils literal"><span class="pre">return</span> <span class="pre">r</span> <span class="pre">+=</span> <span class="pre">-n</span></tt></td>
  65. <td>&nbsp;</td>
  66. </tr>
  67. <tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre">-</span> <span class="pre">n</span></tt></td>
  68. <td><tt class="docutils literal"><span class="pre">X</span></tt></td>
  69. <td><tt class="docutils literal"><span class="pre">{</span> <span class="pre">X</span> <span class="pre">tmp</span> <span class="pre">=</span> <span class="pre">a;</span> <span class="pre">return</span> <span class="pre">tmp</span>
  70. <span class="pre">-=</span> <span class="pre">n;</span> <span class="pre">}</span></tt></td>
  71. <td>&nbsp;</td>
  72. </tr>
  73. <tr><td><tt class="docutils literal"><span class="pre">b</span> <span class="pre">-</span> <span class="pre">a</span></tt></td>
  74. <td><tt class="docutils literal"><span class="pre">Distance</span></tt></td>
  75. <td><tt class="docutils literal"><span class="pre">a</span> <span class="pre">&lt;</span> <span class="pre">b</span> <span class="pre">?</span>&nbsp; <span class="pre">distance(a,b)</span>
  76. <span class="pre">:</span> <span class="pre">-distance(b,a)</span></tt></td>
  77. <td>pre: there exists a
  78. value <tt class="docutils literal"><span class="pre">n</span></tt> of
  79. <tt class="docutils literal"><span class="pre">Distance</span></tt> such that
  80. <tt class="docutils literal"><span class="pre">a</span> <span class="pre">+</span> <span class="pre">n</span> <span class="pre">==</span> <span class="pre">b</span></tt>. <tt class="docutils literal"><span class="pre">b</span>
  81. <span class="pre">==</span> <span class="pre">a</span> <span class="pre">+</span> <span class="pre">(b</span> <span class="pre">-</span> <span class="pre">a)</span></tt>.</td>
  82. </tr>
  83. <tr><td><tt class="docutils literal"><span class="pre">a[n]</span></tt></td>
  84. <td>convertible to T</td>
  85. <td><tt class="docutils literal"><span class="pre">*(a</span> <span class="pre">+</span> <span class="pre">n)</span></tt></td>
  86. <td>pre: a is a <em>Readable
  87. Iterator</em></td>
  88. </tr>
  89. <tr><td><tt class="docutils literal"><span class="pre">a[n]</span> <span class="pre">=</span> <span class="pre">v</span></tt></td>
  90. <td>convertible to T</td>
  91. <td><tt class="docutils literal"><span class="pre">*(a</span> <span class="pre">+</span> <span class="pre">n)</span> <span class="pre">=</span> <span class="pre">v</span></tt></td>
  92. <td>pre: a is a <em>Writable
  93. iterator</em></td>
  94. </tr>
  95. <tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre">&lt;</span> <span class="pre">b</span></tt></td>
  96. <td>convertible to <tt class="docutils literal"><span class="pre">bool</span></tt></td>
  97. <td><tt class="docutils literal"><span class="pre">b</span> <span class="pre">-</span> <span class="pre">a</span> <span class="pre">&gt;</span> <span class="pre">0</span></tt></td>
  98. <td><tt class="docutils literal"><span class="pre">&lt;</span></tt> is a total
  99. ordering relation</td>
  100. </tr>
  101. <tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre">&gt;</span> <span class="pre">b</span></tt></td>
  102. <td>convertible to <tt class="docutils literal"><span class="pre">bool</span></tt></td>
  103. <td><tt class="docutils literal"><span class="pre">b</span> <span class="pre">&lt;</span> <span class="pre">a</span></tt></td>
  104. <td><tt class="docutils literal"><span class="pre">&gt;</span></tt> is a total
  105. ordering relation</td>
  106. </tr>
  107. <tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre">&gt;=</span> <span class="pre">b</span></tt></td>
  108. <td>convertible to <tt class="docutils literal"><span class="pre">bool</span></tt></td>
  109. <td><tt class="docutils literal"><span class="pre">!(a</span> <span class="pre">&lt;</span> <span class="pre">b)</span></tt></td>
  110. <td>&nbsp;</td>
  111. </tr>
  112. <tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre">&lt;=</span> <span class="pre">b</span></tt></td>
  113. <td>convertible to <tt class="docutils literal"><span class="pre">bool</span></tt></td>
  114. <td><tt class="docutils literal"><span class="pre">!(a</span> <span class="pre">&gt;</span> <span class="pre">b)</span></tt></td>
  115. <td>&nbsp;</td>
  116. </tr>
  117. <tr><td><tt class="docutils literal"><span class="pre">iterator_traversal&lt;X&gt;::type</span></tt></td>
  118. <td>Convertible to
  119. <tt class="docutils literal"><span class="pre">random_access_traversal_tag</span></tt></td>
  120. <td>&nbsp;</td>
  121. <td>&nbsp;</td>
  122. </tr>
  123. </tbody>
  124. </table>
  125. </div>
  126. <div class="footer">
  127. <hr class="footer" />
  128. <a class="reference external" href="RandomAccessTraversal.rst">View document source</a>.
  129. Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
  130. </div>
  131. </body>
  132. </html>