iterator_concept.html 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta name="generator" content=
  6. "HTML Tidy for Linux/x86 (vers 1st March 2004), see www.w3.org" />
  7. <meta http-equiv="Content-Type" content=
  8. "text/html; charset=us-ascii" />
  9. <link rel="stylesheet" href="../../../../boost.css" type="text/css"/>
  10. <link rel="stylesheet" href="ublas.css" type="text/css" />
  11. <script type="text/javascript" src="js/jquery-1.3.2.min.js" async="async" ></script>
  12. <script type="text/javascript" src="js/jquery.toc-gw.js" async="async" ></script>
  13. <title>Iterator Concepts</title>
  14. </head>
  15. <body>
  16. <h1><img src="../../../../boost.png" align="middle" />Iterator Concepts</h1>
  17. <div class="toc" id="toc"></div>
  18. <p>An Iterator is a restricted pointer-like object pointing into a
  19. vector or matrix container.</p>
  20. <h2><a name="indexed_bidirectional_iterator"
  21. ></a>Indexed Bidirectional Iterator</h2>
  22. <h4>Description</h4>
  23. <p>An Indexed Bidirectional Iterator is an iterator of a container
  24. that can be dereferenced, incremented, decremented and carries
  25. index information.</p>
  26. <h4>Refinement of</h4>
  27. <p>Assignable, Equality Comparable, Default Constructible.</p>
  28. <h4>Associated types</h4>
  29. <table border="1" summary="associated types">
  30. <tbody>
  31. <tr>
  32. <td>Value type</td>
  33. <td>The type of the value obtained by dereferencing a Indexed
  34. Bidirectional Iterator</td>
  35. </tr>
  36. <tr>
  37. <td>Container type</td>
  38. <td>The type of the container a Indexed Bidirectional Iterator
  39. points into.</td>
  40. </tr>
  41. </tbody>
  42. </table>
  43. <h4>Notation</h4>
  44. <table border="0" summary="notation">
  45. <tbody>
  46. <tr>
  47. <td><code>I</code></td>
  48. <td>A type that is a model of Indexed Bidirectional Iterator</td>
  49. </tr>
  50. <tr>
  51. <td><code>T</code></td>
  52. <td>The value type of <code>I</code></td>
  53. </tr>
  54. <tr>
  55. <td><code>C</code></td>
  56. <td>The container type of <code>I</code></td>
  57. </tr>
  58. <tr>
  59. <td><code>it</code>, <code>itt, it1</code>, <code>it2</code></td>
  60. <td>Objects of type <code>I</code></td>
  61. </tr>
  62. <tr>
  63. <td><code>t</code></td>
  64. <td>Object of type <code>T</code></td>
  65. </tr>
  66. <tr>
  67. <td><code>c</code></td>
  68. <td>Object of type <code>C</code></td>
  69. </tr>
  70. </tbody>
  71. </table>
  72. <h4>Definitions</h4>
  73. <p>A Indexed Bidirectional Iterator may be <i>mutable</i>, meaning
  74. that the values referred to by objects of that type may be
  75. modified, or <i>constant</i> , meaning that they may not. If an
  76. iterator type is mutable, this implies that its value type is a
  77. model of Assignable; the converse, though, is not necessarily
  78. true.</p>
  79. <p>A Indexed Bidirectional Iterator may have a <i>singular</i>
  80. value, meaning that the results of most operations, including
  81. comparison for equality, are undefined. The only operation that is
  82. guaranteed to be supported is assigning a nonsingular iterator to a
  83. singular iterator.</p>
  84. <p>A Indexed Bidirectional Iterator may have a
  85. <i>dereferenceable</i> value, meaning that dereferencing it yields
  86. a well-defined value. Dereferenceable iterators are always
  87. nonsingular, but the converse is not true.</p>
  88. <p>An Indexed Bidirectional Iterator is <i>past-the-end</i> if it
  89. points beyond the last element of a container. Past-the-end values
  90. are nonsingular and nondereferenceable.</p>
  91. <h4>Valid expressions</h4>
  92. <p>In addition to the expressions defined for Assignable, Equality
  93. Comparable and Default Constructible, the following expressions
  94. must be valid.</p>
  95. <table border="1" summary="expressions">
  96. <tbody>
  97. <tr>
  98. <th>Name</th>
  99. <th>Expression</th>
  100. <th>Type requirements</th>
  101. <th>Return type</th>
  102. </tr>
  103. <tr>
  104. <td>Default constructor</td>
  105. <td><code>I it</code></td>
  106. <td>&nbsp;</td>
  107. <td>&nbsp;</td>
  108. </tr>
  109. <tr>
  110. <td>Dereference</td>
  111. <td><code>*it</code></td>
  112. <td>&nbsp;</td>
  113. <td>Convertible to <code>T</code>.</td>
  114. </tr>
  115. <tr>
  116. <td>Dereference assignment</td>
  117. <td><code>*it = t</code></td>
  118. <td><code>I</code> is mutable.</td>
  119. <td>&nbsp;</td>
  120. </tr>
  121. <tr>
  122. <td>Member access</td>
  123. <td><code>it-&gt;m</code></td>
  124. <td><code>T</code> is a type for which <code>t.m</code> is
  125. defined.</td>
  126. <td>&nbsp;</td>
  127. </tr>
  128. <tr>
  129. <td>Preincrement</td>
  130. <td><code>++ it</code></td>
  131. <td>&nbsp;</td>
  132. <td><code>I &amp;</code></td>
  133. </tr>
  134. <tr>
  135. <td>Postincrement</td>
  136. <td><code>it ++</code></td>
  137. <td>&nbsp;</td>
  138. <td><code>I</code></td>
  139. </tr>
  140. <tr>
  141. <td>Predecrement</td>
  142. <td><code>-- it</code></td>
  143. <td>&nbsp;</td>
  144. <td><code>I &amp;</code></td>
  145. </tr>
  146. <tr>
  147. <td>Postdecrement</td>
  148. <td><code>it --</code></td>
  149. <td>&nbsp;</td>
  150. <td><code>I</code></td>
  151. </tr>
  152. <tr>
  153. <td>Index</td>
  154. <td><code>it.index ()</code></td>
  155. <td>&nbsp;</td>
  156. <td><code>C::size_type</code></td>
  157. </tr>
  158. </tbody>
  159. </table>
  160. <h4>Expression Semantics</h4>
  161. <p>Semantics of an expression is defined only where it differs
  162. from, or is not defined in, Assignable, Equality Comparable and
  163. Default Constructible.</p>
  164. <table border="1" summary="semantics">
  165. <tbody>
  166. <tr>
  167. <th>Name</th>
  168. <th>Expression</th>
  169. <th>Precondition</th>
  170. <th>Semantics</th>
  171. <th>Postcondition</th>
  172. </tr>
  173. <tr>
  174. <td>Default constructor</td>
  175. <td><code>I it</code></td>
  176. <td>&nbsp;</td>
  177. <td>&nbsp;</td>
  178. <td><code>it</code> is singular.</td>
  179. </tr>
  180. <tr>
  181. <td>Dereference</td>
  182. <td><code>*it</code></td>
  183. <td><code>it</code> is dereferenceable.</td>
  184. <td>&nbsp;</td>
  185. <td>&nbsp;</td>
  186. </tr>
  187. <tr>
  188. <td>Dereference assignment</td>
  189. <td><code>*it = t</code></td>
  190. <td>Same as for <code>*it</code>.</td>
  191. <td>&nbsp;</td>
  192. <td><code>*it</code> is a copy of t.</td>
  193. </tr>
  194. <tr>
  195. <td>Member access</td>
  196. <td><code>it-&gt;m</code></td>
  197. <td><code>it</code> is dereferenceable.</td>
  198. <td>Equivalent to <code>(*it).m</code></td>
  199. <td>&nbsp;</td>
  200. </tr>
  201. <tr>
  202. <td>Preincrement</td>
  203. <td><code>++ it</code></td>
  204. <td><code>it</code> is dereferenceable.</td>
  205. <td><code>it</code> is modified to point to the next element.</td>
  206. <td><code>it</code> is dereferenceable or past-the-end.
  207. <code><br />
  208. &amp;it == &amp;++ it</code>.<br />
  209. If <code>it1 == it2</code>,<br />
  210. then <code>++ it1 == ++ it2</code>.</td>
  211. </tr>
  212. <tr>
  213. <td>Postincrement</td>
  214. <td><code>it ++</code></td>
  215. <td>Same as for <code>++ it</code>.</td>
  216. <td>Equivalent to<br />
  217. <code>{<br />
  218. &nbsp;I itt = it;<br />
  219. &nbsp;++ it;<br />
  220. &nbsp;return itt;<br />
  221. }</code></td>
  222. <td><code>it</code> is dereferenceable or past-the-end.</td>
  223. </tr>
  224. <tr>
  225. <td>Predecrement</td>
  226. <td><code>-- it</code></td>
  227. <td><code>it</code> is dereferenceable or past-the-end.<br />
  228. There exists a dereferenceable iterator <code>itt</code> such that
  229. <code>it == ++ itt</code>.</td>
  230. <td><code>it</code> is modified to point to the previous
  231. element.</td>
  232. <td><code>it</code> is dereferenceable.<br />
  233. <code>&amp;it = &amp;-- it</code>.<br />
  234. If <code>it1 == it2</code>,<br />
  235. then <code>-- it1 == -- it2</code>.<br />
  236. If <code>it2</code> is dereferenceable and <code>it1 ==
  237. ++it2</code>,<br />
  238. then <code>--it1 == it2</code>.</td>
  239. </tr>
  240. <tr>
  241. <td>Postdecrement</td>
  242. <td><code>it --</code></td>
  243. <td>Same as for -- <code>it</code>.</td>
  244. <td>Equivalent to<br />
  245. <code>{<br />
  246. &nbsp;I itt = it;<br />
  247. &nbsp;-- it;<br />
  248. &nbsp;return itt;<br />
  249. }</code></td>
  250. <td><code>it</code> is dereferenceable.&nbsp;</td>
  251. </tr>
  252. <tr>
  253. <td>Index</td>
  254. <td><code>it.index ()</code></td>
  255. <td><code>it</code> is dereferenceable.</td>
  256. <td><code>it.index () &gt;= 0</code><br />
  257. and<br />
  258. <code>it.index () &lt; it ().size ()</code></td>
  259. <td>If <code>it1 == it2</code>,<br />
  260. then <code>it1.index () == it2.index ()</code>.<br />
  261. If <code>it1 == it2</code>,<br />
  262. then <code>it1.index () &lt; (++ it2).index
  263. ()</code>.<br />
  264. If <code>it1 == it2</code>,<br />
  265. then <code>it1.index () &gt; (-- it2).index
  266. ()</code>.</td>
  267. </tr>
  268. </tbody>
  269. </table>
  270. <h4>Complexity guarantees</h4>
  271. <p>The complexity of operations on indexed bidirectional iterators
  272. is guaranteed to be amortized constant time.</p>
  273. <h4>Invariants</h4>
  274. <table border="1" summary="invariants">
  275. <tbody>
  276. <tr>
  277. <td>Identity</td>
  278. <td><code>it1 == it2</code> if and only if <code>&amp;*it1 ==
  279. &amp;*it2</code>.</td>
  280. </tr>
  281. <tr>
  282. <td>Symmetry of increment and decrement</td>
  283. <td>If <code>it</code> is dereferenceable, then <code>++ it;
  284. --it;</code> is a null operation. Similarly, <code>-- it; ++
  285. it;</code> is a null operation.</td>
  286. </tr>
  287. <tr>
  288. <td>Relation between iterator index and container element
  289. operator</td>
  290. <td>If <code>it</code> is dereferenceable, <code>*it == it ()
  291. (it.index ())</code>.</td>
  292. </tr>
  293. </tbody>
  294. </table>
  295. <h4>Models</h4>
  296. <ul>
  297. <li><code>sparse_vector::iterator</code></li>
  298. </ul>
  299. <h2><a name="indexed_random_access_iterator"
  300. ></a>Indexed Random Access Iterator</h2>
  301. <h4>Description</h4>
  302. <p>An Indexed Random Access Iterator is an iterator of a container
  303. that can be dereferenced, moved forward, moved backward and carries
  304. index information.</p>
  305. <h4>Refinement of</h4>
  306. <p>LessThanComparable, <a href=
  307. "#indexed_bidirectional_iterator">Indexed Bidirectional
  308. Iterator</a> .</p>
  309. <h4>Associated types</h4>
  310. <table border="1" summary="associated types">
  311. <tbody>
  312. <tr>
  313. <td>Value type</td>
  314. <td>The type of the value obtained by dereferencing a Indexed
  315. Random Access Iterator</td>
  316. </tr>
  317. <tr>
  318. <td>Container type</td>
  319. <td>The type of the container a Indexed Random Access Iterator
  320. points into.</td>
  321. </tr>
  322. </tbody>
  323. </table>
  324. <h4>Notation</h4>
  325. <table border="0" summary="notation">
  326. <tbody>
  327. <tr>
  328. <td><code>I</code></td>
  329. <td>A type that is a model of Indexed Random Access Iterator</td>
  330. </tr>
  331. <tr>
  332. <td><code>T</code></td>
  333. <td>The value type of <code>I</code></td>
  334. </tr>
  335. <tr>
  336. <td><code>C</code></td>
  337. <td>The container type of <code>I</code></td>
  338. </tr>
  339. <tr>
  340. <td><code>it</code>, <code>itt, it1</code>, <code>it2</code></td>
  341. <td>Objects of type <code>I</code></td>
  342. </tr>
  343. <tr>
  344. <td><code>t</code></td>
  345. <td>Object of type <code>T</code></td>
  346. </tr>
  347. <tr>
  348. <td><code>n</code></td>
  349. <td>Object of type <code>C::difference_type</code></td>
  350. </tr>
  351. </tbody>
  352. </table>
  353. <h4>Definitions</h4>
  354. <p>An Indexed Random Access Iterator <code>it1</code> is
  355. <i>reachable</i> from an Indexed Random Access Iterator
  356. <code>it2</code> if, after applying <code>operator ++</code> to
  357. <code>it2</code> a finite number of times, <code>it1 ==
  358. it2</code>.</p>
  359. <h4>Valid expressions</h4>
  360. <p>In addition to the expressions defined for <a href=
  361. "#indexed_bidirectional_iterator">Indexed Bidirectional
  362. Iterator</a> , the following expressions must be valid.</p>
  363. <table border="1" summary="expressions">
  364. <tbody>
  365. <tr>
  366. <th>Name</th>
  367. <th>Expression</th>
  368. <th>Type requirements</th>
  369. <th>Return type</th>
  370. </tr>
  371. <tr>
  372. <td>Forward motion</td>
  373. <td><code>it += n</code></td>
  374. <td>&nbsp;</td>
  375. <td><code>I &amp;</code></td>
  376. </tr>
  377. <tr>
  378. <td>Iterator addition</td>
  379. <td><code>it + n</code></td>
  380. <td>&nbsp;</td>
  381. <td><code>I</code></td>
  382. </tr>
  383. <tr>
  384. <td>Backward motion</td>
  385. <td><code>i -= n</code></td>
  386. <td>&nbsp;</td>
  387. <td><code>I &amp;</code></td>
  388. </tr>
  389. <tr>
  390. <td>Iterator subtraction</td>
  391. <td><code>it - n</code></td>
  392. <td>&nbsp;</td>
  393. <td><code>I</code>&nbsp;</td>
  394. </tr>
  395. <tr>
  396. <td>Difference</td>
  397. <td><code>it1 - it2</code></td>
  398. <td>&nbsp;</td>
  399. <td><code>C::difference_type</code></td>
  400. </tr>
  401. <tr>
  402. <td>Element operator</td>
  403. <td><code>it [n]</code></td>
  404. <td>&nbsp;</td>
  405. <td>Convertible to <code>T</code>.</td>
  406. </tr>
  407. <tr>
  408. <td>Element assignment</td>
  409. <td><code>it [n] = t</code></td>
  410. <td><code>I</code> is mutable</td>
  411. <td>Convertible to <code>T</code>.</td>
  412. </tr>
  413. </tbody>
  414. </table>
  415. <h4>Expression Semantics</h4>
  416. <p>Semantics of an expression is defined only where it differs
  417. from, or is not defined in, <a href=
  418. "#indexed_bidirectional_iterator">Indexed Bidirectional
  419. Iterator</a> .</p>
  420. <table border="1" summary="semantics">
  421. <tbody>
  422. <tr>
  423. <th>Name</th>
  424. <th>Expression</th>
  425. <th>Precondition</th>
  426. <th>Semantics</th>
  427. <th>Postcondition</th>
  428. </tr>
  429. <tr>
  430. <td>Forward motion</td>
  431. <td><code>it += n</code></td>
  432. <td>Including <code>it</code> itself, there must be <code>n</code>
  433. dereferenceable or past-the-end iterators following or preceding
  434. <code>it</code>, depending on whether <code>n</code> is positive or
  435. negative.</td>
  436. <td>If <code>n &gt; 0</code>, equivalent to executing <code>++
  437. it</code> <code>n</code> times. If <code>n &lt; 0</code>,
  438. equivalent to executing <code>-- it</code> <code>n</code> times. If
  439. <code>n == 0</code>, this is a null operation.</td>
  440. <td><code>it</code> is dereferenceable or past-the-end.</td>
  441. </tr>
  442. <tr>
  443. <td>Iterator addition</td>
  444. <td><code>it + n</code></td>
  445. <td>Same as for <code>i += n</code>.</td>
  446. <td>Equivalent to<br />
  447. <code>{<br />
  448. &nbsp;I itt = it;<br />
  449. &nbsp;return itt += n;<br />
  450. }</code></td>
  451. <td>Result is dereferenceable or past-the-end.</td>
  452. </tr>
  453. <tr>
  454. <td>Backward motion</td>
  455. <td><code>it -= n</code></td>
  456. <td>Including <code>it</code> itself, there must be <code>n</code>
  457. dereferenceable or past-the-end iterators preceding or following
  458. <code>it</code>, depending on whether <code>n</code> is positive or
  459. negative.</td>
  460. <td>Equivalent to <code>it += (-n)</code>.</td>
  461. <td><code>it</code> is dereferenceable or past-the-end.</td>
  462. </tr>
  463. <tr>
  464. <td>Iterator subtraction</td>
  465. <td><code>it - n</code></td>
  466. <td>Same as for <code>i -= n</code>.</td>
  467. <td>Equivalent to<br />
  468. <code>{<br />
  469. &nbsp;I itt = it;<br />
  470. &nbsp;return itt -= n;<br />
  471. }</code></td>
  472. <td>Result is dereferenceable or past-the-end.</td>
  473. </tr>
  474. <tr>
  475. <td>Difference</td>
  476. <td><code>it1 - it2</code></td>
  477. <td>Either <code>it1</code> is reachable from <code>it2</code> or
  478. <code>it2</code> is reachable from <code>it1</code>, or both.</td>
  479. <td>Returns a number <code>n</code> such that <code>it1 == it2 +
  480. n</code></td>
  481. <td>&nbsp;</td>
  482. </tr>
  483. <tr>
  484. <td>Element operator</td>
  485. <td><code>it [n]</code></td>
  486. <td><code>it + n</code> exists and is dereferenceable.</td>
  487. <td>Equivalent to <code>*(it + n)</code></td>
  488. <td>&nbsp;</td>
  489. </tr>
  490. <tr>
  491. <td>Element assignment</td>
  492. <td><code>i[n] = t</code></td>
  493. <td>Same as for <code>it [n]</code>.</td>
  494. <td>Equivalent to <code>*(it + n) = t</code></td>
  495. <td>&nbsp;</td>
  496. </tr>
  497. </tbody>
  498. </table>
  499. <h4>Complexity guarantees</h4>
  500. <p>The complexity of operations on indexed random access iterators
  501. is guaranteed to be amortized constant time.</p>
  502. <h4>Invariants</h4>
  503. <table border="1" summary="invariants">
  504. <tbody>
  505. <tr>
  506. <td>Symmetry of addition and subtraction</td>
  507. <td>If <code>it + n</code> is well-defined, then <code>it += n; it
  508. -= n;</code> and <code>(it + n) - n</code> are null operations.
  509. Similarly, if <code>it - n</code> is well-defined, then <code>it -=
  510. n; it += n;</code> and <code>(it - n) + n</code> are null
  511. operations.</td>
  512. </tr>
  513. <tr>
  514. <td>Relation between distance and addition</td>
  515. <td>If <code>it1 - it2</code> is well-defined, then <code>it1 ==
  516. it2 + (it1 - it2)</code>.</td>
  517. </tr>
  518. <tr>
  519. <td>Reachability and distance</td>
  520. <td>If <code>it1</code> is reachable from <code>it2</code>, then
  521. <code>it1 - it2 &gt;= 0</code>.</td>
  522. </tr>
  523. </tbody>
  524. </table>
  525. <h4>Models</h4>
  526. <ul>
  527. <li><code>vector::iterator</code></li>
  528. </ul>
  529. <h2><a name="indexed_bidirectional_cr_iterator"
  530. ></a>Indexed Bidirectional Column/Row Iterator</h2>
  531. <h4>Description</h4>
  532. <p>An Indexed Bidirectional Column/Row Iterator is an iterator of a
  533. container that can be dereferenced, incremented, decremented and
  534. carries index information.</p>
  535. <h4>Refinement of</h4>
  536. <p>Assignable, Equality Comparable, Default Constructible.</p>
  537. <h4>Associated types</h4>
  538. <table border="1" summary="associated types">
  539. <tbody>
  540. <tr>
  541. <td>Value type</td>
  542. <td>The type of the value obtained by dereferencing a Indexed
  543. Bidirectional Column/Row Iterator</td>
  544. </tr>
  545. <tr>
  546. <td>Container type</td>
  547. <td>The type of the container a Indexed Bidirectional Column/Row
  548. Iterator points into.</td>
  549. </tr>
  550. </tbody>
  551. </table>
  552. <h4>Notation</h4>
  553. <table border="0" summary="notation">
  554. <tbody>
  555. <tr>
  556. <td><code>I1</code></td>
  557. <td>A type that is a model of Indexed Bidirectional Column/Row
  558. Iterator</td>
  559. </tr>
  560. <tr>
  561. <td><code>I2</code></td>
  562. <td>A type that is a model of Indexed Bidirectional Row/Column
  563. Iterator</td>
  564. </tr>
  565. <tr>
  566. <td><code>T</code></td>
  567. <td>The value type of <code>I1</code> and <code>I2</code></td>
  568. </tr>
  569. <tr>
  570. <td><code>C</code></td>
  571. <td>The container type of <code>I1</code> and <code>I2</code></td>
  572. </tr>
  573. <tr>
  574. <td><code>it1</code>, <code>it1t, it11</code>,
  575. <code>it12</code></td>
  576. <td>Objects of type <code>I1</code></td>
  577. </tr>
  578. <tr>
  579. <td><code>it2</code>, <code>it2t</code></td>
  580. <td>Objects of type <code>I2</code></td>
  581. </tr>
  582. <tr>
  583. <td><code>t</code></td>
  584. <td>Object of type <code>T</code></td>
  585. </tr>
  586. <tr>
  587. <td><code>c</code></td>
  588. <td>Object of type <code>C</code></td>
  589. </tr>
  590. </tbody>
  591. </table>
  592. <h4>Definitions</h4>
  593. <h4>Valid expressions</h4>
  594. <p>In addition to the expressions defined for Assignable, Equality
  595. Comparable and Default Constructible, the following expressions
  596. must be valid.</p>
  597. <table border="1" summary="expressions">
  598. <tbody>
  599. <tr>
  600. <th>Name</th>
  601. <th>Expression</th>
  602. <th>Type requirements</th>
  603. <th>Return type</th>
  604. </tr>
  605. <tr>
  606. <td>Default constructor</td>
  607. <td><code>I1 it</code></td>
  608. <td>&nbsp;</td>
  609. <td>&nbsp;</td>
  610. </tr>
  611. <tr>
  612. <td>Dereference</td>
  613. <td><code>*it</code></td>
  614. <td>&nbsp;</td>
  615. <td>Convertible to <code>T</code>.</td>
  616. </tr>
  617. <tr>
  618. <td>Dereference assignment</td>
  619. <td><code>*it = t</code></td>
  620. <td><code>I1</code> is mutable.</td>
  621. <td>&nbsp;</td>
  622. </tr>
  623. <tr>
  624. <td>Member access</td>
  625. <td><code>it-&gt;m</code></td>
  626. <td><code>T</code> is a type for which <code>t.m</code> is
  627. defined.</td>
  628. <td>&nbsp;</td>
  629. </tr>
  630. <tr>
  631. <td>Preincrement</td>
  632. <td><code>++ it</code></td>
  633. <td>&nbsp;</td>
  634. <td><code>I1 &amp;</code></td>
  635. </tr>
  636. <tr>
  637. <td>Postincrement</td>
  638. <td><code>it ++</code></td>
  639. <td>&nbsp;</td>
  640. <td><code>I1</code></td>
  641. </tr>
  642. <tr>
  643. <td>Predecrement</td>
  644. <td><code>-- it</code></td>
  645. <td>&nbsp;</td>
  646. <td><code>I1 &amp;</code></td>
  647. </tr>
  648. <tr>
  649. <td>Postdecrement</td>
  650. <td><code>it --</code></td>
  651. <td>&nbsp;</td>
  652. <td><code>I1</code></td>
  653. </tr>
  654. <tr>
  655. <td>Row Index</td>
  656. <td><code>it.index1 ()</code></td>
  657. <td>&nbsp;</td>
  658. <td><code>C::size_type</code></td>
  659. </tr>
  660. <tr>
  661. <td>Column Index</td>
  662. <td><code>it.index2 ()</code></td>
  663. <td>&nbsp;</td>
  664. <td><code>C::size_type</code></td>
  665. </tr>
  666. <tr>
  667. <td>Row/Column Begin</td>
  668. <td><code>it.begin ()</code></td>
  669. <td>&nbsp;</td>
  670. <td><code>I2</code></td>
  671. </tr>
  672. <tr>
  673. <td>Row/Column End</td>
  674. <td><code>it.end ()</code></td>
  675. <td>&nbsp;</td>
  676. <td><code>I2</code></td>
  677. </tr>
  678. <tr>
  679. <td>Reverse Row/Column Begin</td>
  680. <td><code>it.rbegin ()</code></td>
  681. <td>&nbsp;</td>
  682. <td><code>reverse_iterator&lt;I2&gt;</code></td>
  683. </tr>
  684. <tr>
  685. <td>Reverse Row/Column End</td>
  686. <td><code>it.rend ()</code></td>
  687. <td>&nbsp;</td>
  688. <td><code>reverse_iterator&lt;I2&gt;</code></td>
  689. </tr>
  690. </tbody>
  691. </table>
  692. <h4>Expression Semantics</h4>
  693. <p>Semantics of an expression is defined only where it differs
  694. from, or is not defined in, Assignable, Equality Comparable and
  695. Default Constructible.</p>
  696. <table border="1" summary="semantics">
  697. <tbody>
  698. <tr>
  699. <th>Name</th>
  700. <th>Expression</th>
  701. <th>Precondition</th>
  702. <th>Semantics</th>
  703. <th>Postcondition</th>
  704. </tr>
  705. <tr>
  706. <td>Default constructor</td>
  707. <td><code>I1 it</code></td>
  708. <td>&nbsp;</td>
  709. <td>&nbsp;</td>
  710. <td><code>it</code> is singular.</td>
  711. </tr>
  712. <tr>
  713. <td>Dereference</td>
  714. <td><code>*it</code></td>
  715. <td><code>it</code> is dereferenceable.</td>
  716. <td>&nbsp;</td>
  717. <td>&nbsp;</td>
  718. </tr>
  719. <tr>
  720. <td>Dereference assignment</td>
  721. <td><code>*it = t</code></td>
  722. <td>Same as for <code>*it</code>.</td>
  723. <td>&nbsp;</td>
  724. <td><code>*it</code> is a copy of t.</td>
  725. </tr>
  726. <tr>
  727. <td>Member access</td>
  728. <td><code>it-&gt;m</code></td>
  729. <td><code>it</code> is dereferenceable.</td>
  730. <td>Equivalent to <code>(*it).m</code></td>
  731. <td>&nbsp;</td>
  732. </tr>
  733. <tr>
  734. <td>Preincrement</td>
  735. <td><code>++ it</code></td>
  736. <td><code>it</code> is dereferenceable.</td>
  737. <td><code>it</code> is modified to point to the next element of
  738. the column/row, i.e. for column iterators holds<br />
  739. <code>it.index1 () &lt; (++ it).index1 ()</code> and<br />
  740. <code>it.index2 () == (++ it).index2 ()</code>,<br />
  741. for row iterators holds<br />
  742. <code>it.index1 () == (++ it).index1 ()</code> and<br />
  743. <code>it.index2 () &lt; (++ it).index2 ()</code>.<br /></td>
  744. <td><code>it</code> is dereferenceable or past-the-end.
  745. <code><br />
  746. &amp;it == &amp;++ it</code>.<br />
  747. If <code>it1 == it2</code>,<br />
  748. then <code>++ it1 == ++ it2</code>.</td>
  749. </tr>
  750. <tr>
  751. <td>Postincrement</td>
  752. <td><code>it ++</code></td>
  753. <td>Same as for <code>++ it</code>.</td>
  754. <td>Equivalent to<br />
  755. <code>{<br />
  756. &nbsp;I1 itt = it;<br />
  757. &nbsp;++ it;<br />
  758. &nbsp;return itt;<br />
  759. }</code></td>
  760. <td><code>it</code> is dereferenceable or past-the-end.</td>
  761. </tr>
  762. <tr>
  763. <td>Predecrement</td>
  764. <td><code>-- it</code></td>
  765. <td><code>it</code> is dereferenceable or past-the-end.<br />
  766. There exists a dereferenceable iterator <code>itt</code> such that
  767. <code>it == ++ itt</code>.</td>
  768. <td><code>it</code> is modified to point to the previous&nbsp;
  769. element of the column/row, i.e. for column iterators holds<br />
  770. <code>it.index1 () &gt; (-- it).index1 ()</code> and<br />
  771. <code>it.index2 () == (-- it).index2 ()</code>,<br />
  772. for row iterators holds<br />
  773. <code>it.index1 () == (-- it).index1 ()</code> and<br />
  774. <code>it.index2 () &gt; (-- it).index2 ()</code>.</td>
  775. <td><code>it</code> is dereferenceable.<br />
  776. <code>&amp;it = &amp;-- it</code>.<br />
  777. If <code>it1 == it2</code>,<br />
  778. then <code>-- it1 == -- it2</code>.</td>
  779. </tr>
  780. <tr>
  781. <td>Postdecrement</td>
  782. <td><code>it --</code></td>
  783. <td>Same as for -- <code>it</code>.</td>
  784. <td>Equivalent to<br />
  785. <code>{<br />
  786. &nbsp;I1 itt = it;<br />
  787. &nbsp;-- it;<br />
  788. &nbsp;return itt;<br />
  789. }</code></td>
  790. <td><code>it</code> is dereferenceable.&nbsp;</td>
  791. </tr>
  792. <tr>
  793. <td>Row Index</td>
  794. <td><code>it.index1 ()</code></td>
  795. <td>If <code>it</code> is a Row iterator then <code>it</code> must be dereferenceable.</td>
  796. <td><code>it.index1 () &gt;= 0</code> and<br />
  797. <code>it.index1 () &lt; it () .size1 ()</code></td>
  798. <td>If <code>it1 == it2</code>,<br />
  799. then <code>it1.index1 () == 12.index1 ()</code>.<br />
  800. If <code>it1</code>, <code>it2</code> are Row Iterators with <code>it1 == it2</code>,<br />
  801. then <code>it1.index1 () &lt; (++ it2</code>).<code>index1 ()</code>.<br />
  802. and <code>it1.index1 () &gt; (-- it2</code>).<code>index1 ()</code>.</td>
  803. </tr>
  804. <tr>
  805. <td>Column Index</td>
  806. <td><code>it.index2 ()</code></td>
  807. <td>If <code>it</code> is a Column iterator then <code>it</code> must be dereferenceable.</td>
  808. <td><code>it.index2 () &gt;= 0</code> and<br />
  809. <code>it.index2 () &lt; it () .size2 ()</code></td>
  810. <td>If <code>it1 == it2</code>,<br />
  811. then <code>it1.index2 () == it2</code>.<code>index2 ()</code>
  812. .<br />
  813. If <code>it1</code>, <code>it2</code> are Column Iterators with <code>it1 == i12</code>,<br />
  814. then <code>it1.index2 () &lt; (++ it2</code>).<code>index2 ()</code>.<br />
  815. end <code>it1.index2 () &gt; (-- it2</code>).<code>index2 ()</code>.</td>
  816. </tr>
  817. <tr>
  818. <td>Row/Column Begin</td>
  819. <td><code>it.begin ()</code></td>
  820. <td><code>it</code> is dereferenceable.</td>
  821. <td>If <code>it</code> is a Column Iterator,<br />
  822. then <code>it2 = it.begin ()</code> is a Row Iterator<br />
  823. with <code>it2.index1 () == it.index1 ()</code>.
  824. <p>If <code>it</code> is a Row Iterator,<br />
  825. then <code>it2 = it.begin ()</code> is a Column Iterator<br />
  826. with <code>it2.index2 () == it.index2 ()</code>.</p>
  827. </td>
  828. <td>&nbsp;</td>
  829. </tr>
  830. <tr>
  831. <td>Row/Column End</td>
  832. <td><code>it.end ()</code></td>
  833. <td><code>it</code> is dereferenceable.</td>
  834. <td>If <code>it</code> is a Column Iterator,<br />
  835. then <code>it2 = it.end ()</code> is a Row Iterator<br />
  836. with <code>it2.index1 () == it.index1 ()</code>.
  837. <p>If <code>it</code> is a Row Iterator,<br />
  838. then <code>it2 = it.end ()</code> is a Column Iterator<br />
  839. with <code>it2.index2 () == it.index2 ()</code>.</p>
  840. </td>
  841. <td>&nbsp;</td>
  842. </tr>
  843. <tr>
  844. <td>Reverse Row/Column Begin</td>
  845. <td><code>it.rbegin ()</code></td>
  846. <td><code>it</code> is dereferenceable.</td>
  847. <td>Equivalent to <code>reverse_iterator&lt;I2&gt; (it.end
  848. ())</code>.</td>
  849. <td>&nbsp;</td>
  850. </tr>
  851. <tr>
  852. <td>Reverse Row/Column End</td>
  853. <td><code>it.rend ()</code></td>
  854. <td><code>it</code> is dereferenceable.</td>
  855. <td>Equivalent to <code>reverse_iterator&lt;I2&gt; (it.begin
  856. ())</code>.</td>
  857. <td>&nbsp;</td>
  858. </tr>
  859. </tbody>
  860. </table>
  861. <h4>Complexity guarantees</h4>
  862. <p>The complexity of operations on indexed bidirectional column/row
  863. iterators is guaranteed to be logarithmic depending on the size of
  864. the container. The complexity of one iterator (depending on the
  865. storage layout) can be lifted to be amortized constant time. The
  866. complexity of the other iterator (depending on the storage layout
  867. and the container) can be lifted to be amortized constant time for
  868. the first row/first column respectively.</p>
  869. <h4>Invariants</h4>
  870. <table border="1" summary="invariants">
  871. <tbody>
  872. <tr>
  873. <td>Identity</td>
  874. <td><code>it1 == it2</code> if and only if <code>&amp;*it1 ==
  875. &amp;*it2</code>.</td>
  876. </tr>
  877. <tr>
  878. <td>Symmetry of increment and decrement</td>
  879. <td>If <code>it</code> is dereferenceable, then <code>++ it;
  880. --it;</code> is a null operation. Similarly, <code>-- it; ++
  881. it;</code> is a null operation.</td>
  882. </tr>
  883. <tr>
  884. <td>Relation between iterator index and container element
  885. operator</td>
  886. <td>If <code>it</code> is dereferenceable, <code>*it == it ()
  887. (it.index1 (), it.index2 ())</code></td>
  888. </tr>
  889. <tr>
  890. <td>Relation between iterator column/row begin and iterator
  891. index</td>
  892. <td>If <code>it</code> is a Column Iterator
  893. and <code>it2 = it.begin ()</code> then <code>it2.index2 () &lt;
  894. it2t.index2 ()</code> for all <code>it2t</code> with <code>it2t ()
  895. == it2 ()</code> and <code>it2t ().index1 () == it2 ().index1
  896. ()</code>.
  897. <p>If <code>it</code> is a Row Iterator and
  898. <code>it2 = it.begin ()</code> then <code>it2.index1 () &lt;
  899. it2t.index1 ()</code> for all <code>it2t</code> with <code>it2t ()
  900. == it2 ()</code> and <code>it2t ().index2 () == it2 ().index2
  901. ()</code>.</p>
  902. </td>
  903. </tr>
  904. <tr>
  905. <td>Relation between iterator column/row end and iterator
  906. index</td>
  907. <td>If <code>it</code> is a Column Iterator
  908. and <code>it2 = it.end ()</code> then <code>it2.index2 () &gt;
  909. it2t.index2 ()</code> for all <code>it2t</code> with <code>it2t ()
  910. == it2 ()</code> and <code>it2t ().index1 () == it2 ().index1
  911. ()</code>.
  912. <p>If <code>it</code> is a Row Iterator and
  913. <code>it2 = it.end ()</code> then <code>it2.index1 () &gt;
  914. it2t.index1 ()</code> for all <code>it2t</code> with <code>it2t ()
  915. == it2 ()</code> and <code>it2t ().index2 () == it2 ().index2
  916. ()</code>.</p>
  917. </td>
  918. </tr>
  919. </tbody>
  920. </table>
  921. <h4>Models</h4>
  922. <ul>
  923. <li><code>sparse_matrix::iterator1</code></li>
  924. <li><code>sparse_matrix::iterator2</code></li>
  925. </ul>
  926. <h2><a name="indexed_random_access_cr_iterator"
  927. ></a>Indexed Random Access Column/Row Iterator</h2>
  928. <h4>Description</h4>
  929. <p>An Indexed Random Access Column/Row Iterator is an iterator of a
  930. container that can be dereferenced, incremented, decremented and
  931. carries index information.</p>
  932. <h4>Refinement of</h4>
  933. <p><a href="#indexed_bidirectional_cr_iterator">Indexed
  934. Bidirectional Column/Row Iterator</a> .</p>
  935. <h4>Associated types</h4>
  936. <table border="1" summary="associated types">
  937. <tbody>
  938. <tr>
  939. <td>Value type</td>
  940. <td>The type of the value obtained by dereferencing a Indexed
  941. Random Access Column/Row Iterator</td>
  942. </tr>
  943. <tr>
  944. <td>Container type</td>
  945. <td>The type of the container a Indexed Random Access Column/Row
  946. Iterator points into.</td>
  947. </tr>
  948. </tbody>
  949. </table>
  950. <h4>Notation</h4>
  951. <table border="0" summary="notation">
  952. <tbody>
  953. <tr>
  954. <td><code>I</code></td>
  955. <td>A type that is a model of Indexed Random Access Column/Row
  956. Iterator</td>
  957. </tr>
  958. <tr>
  959. <td><code>T</code></td>
  960. <td>The value type of <code>I</code></td>
  961. </tr>
  962. <tr>
  963. <td><code>C</code></td>
  964. <td>The container type of <code>I</code></td>
  965. </tr>
  966. <tr>
  967. <td><code>it</code>, <code>itt, it1</code>, <code>it2</code></td>
  968. <td>Objects of type <code>I</code></td>
  969. </tr>
  970. <tr>
  971. <td><code>t</code></td>
  972. <td>Object of type <code>T</code></td>
  973. </tr>
  974. <tr>
  975. <td><code>c</code></td>
  976. <td>Object of type <code>C</code></td>
  977. </tr>
  978. </tbody>
  979. </table>
  980. <h4>Definitions</h4>
  981. <h4>Valid expressions</h4>
  982. <p>In addition to the expressions defined for <a href=
  983. "#indexed_bidirectional_cr_iterator">Indexed Bidirectional
  984. Column/Row Iterator</a> , the following expressions must be
  985. valid.</p>
  986. <table border="1" summary="expressions">
  987. <tbody>
  988. <tr>
  989. <th>Name</th>
  990. <th>Expression</th>
  991. <th>Type requirements</th>
  992. <th>Return type</th>
  993. </tr>
  994. <tr>
  995. <td>Forward motion</td>
  996. <td><code>it += n</code></td>
  997. <td>&nbsp;</td>
  998. <td><code>I &amp;</code></td>
  999. </tr>
  1000. <tr>
  1001. <td>Iterator addition</td>
  1002. <td><code>it + n</code></td>
  1003. <td>&nbsp;</td>
  1004. <td><code>I</code></td>
  1005. </tr>
  1006. <tr>
  1007. <td>Backward motion</td>
  1008. <td><code>i -= n</code></td>
  1009. <td>&nbsp;</td>
  1010. <td><code>I &amp;</code></td>
  1011. </tr>
  1012. <tr>
  1013. <td>Iterator subtraction</td>
  1014. <td><code>it - n</code></td>
  1015. <td>&nbsp;</td>
  1016. <td><code>I</code>&nbsp;</td>
  1017. </tr>
  1018. <tr>
  1019. <td>Difference</td>
  1020. <td><code>it1 - it2</code></td>
  1021. <td>&nbsp;</td>
  1022. <td><code>C::difference_type</code></td>
  1023. </tr>
  1024. <tr>
  1025. <td>Element operator</td>
  1026. <td><code>it [n]</code></td>
  1027. <td>&nbsp;</td>
  1028. <td>Convertible to <code>T</code>.</td>
  1029. </tr>
  1030. <tr>
  1031. <td>Element assignment</td>
  1032. <td><code>it [n] = t</code></td>
  1033. <td><code>I</code> is mutable</td>
  1034. <td>Convertible to <code>T</code>.</td>
  1035. </tr>
  1036. </tbody>
  1037. </table>
  1038. <h4>Expression Semantics</h4>
  1039. <p>Semantics of an expression is defined only where it differs
  1040. from, or is not defined in, <a href=
  1041. "#indexed_bidirectional_cr_iterator">Indexed Bidirectional
  1042. Column/Row Iterator</a> .</p>
  1043. <table border="1" summary="semantics">
  1044. <tbody>
  1045. <tr>
  1046. <th>Name</th>
  1047. <th>Expression</th>
  1048. <th>Precondition</th>
  1049. <th>Semantics</th>
  1050. <th>Postcondition</th>
  1051. </tr>
  1052. <tr>
  1053. <td>Forward motion</td>
  1054. <td><code>it += n</code></td>
  1055. <td>Including <code>it</code> itself, there must be <code>n</code>
  1056. dereferenceable or past-the-end iterators following or preceding
  1057. <code>it</code>, depending on whether <code>n</code> is positive or
  1058. negative.</td>
  1059. <td>If <code>n &gt; 0</code>, equivalent to executing <code>++
  1060. it</code> <code>n</code> times. If <code>n &lt; 0</code>,
  1061. equivalent to executing <code>-- it</code> <code>n</code> times. If
  1062. <code>n == 0</code>, this is a null operation.</td>
  1063. <td><code>it</code> is dereferenceable or past-the-end.</td>
  1064. </tr>
  1065. <tr>
  1066. <td>Iterator addition</td>
  1067. <td><code>it + n</code></td>
  1068. <td>Same as for <code>i += n</code>.</td>
  1069. <td>Equivalent to<br />
  1070. <code>{<br />
  1071. &nbsp;I itt = it;<br />
  1072. &nbsp;return itt += n;<br />
  1073. }</code></td>
  1074. <td>Result is dereferenceable or past-the-end.</td>
  1075. </tr>
  1076. <tr>
  1077. <td>Backward motion</td>
  1078. <td><code>it -= n</code></td>
  1079. <td>Including <code>it</code> itself, there must be <code>n</code>
  1080. dereferenceable or past-the-end iterators preceding or following
  1081. <code>it</code>, depending on whether <code>n</code> is positive or
  1082. negative.</td>
  1083. <td>Equivalent to <code>it += (-n)</code>.</td>
  1084. <td><code>it</code> is dereferenceable or past-the-end.</td>
  1085. </tr>
  1086. <tr>
  1087. <td>Iterator subtraction</td>
  1088. <td><code>it - n</code></td>
  1089. <td>Same as for <code>i -= n</code>.</td>
  1090. <td>Equivalent to<br />
  1091. <code>{<br />
  1092. &nbsp;I itt = it;<br />
  1093. &nbsp;return itt -= n;<br />
  1094. }</code></td>
  1095. <td>Result is dereferenceable or past-the-end.</td>
  1096. </tr>
  1097. <tr>
  1098. <td>Difference</td>
  1099. <td><code>it1 - it2</code></td>
  1100. <td>Either <code>it1</code> is reachable from <code>it2</code> or
  1101. <code>it2</code> is reachable from <code>it1</code>, or both.</td>
  1102. <td>Returns a number <code>n</code> such that <code>it1 == it2 +
  1103. n</code></td>
  1104. <td>&nbsp;</td>
  1105. </tr>
  1106. <tr>
  1107. <td>Element operator</td>
  1108. <td><code>it [n]</code></td>
  1109. <td><code>it + n</code> exists and is dereferenceable.</td>
  1110. <td>Equivalent to <code>*(it + n)</code></td>
  1111. <td>&nbsp;</td>
  1112. </tr>
  1113. <tr>
  1114. <td>Element assignment</td>
  1115. <td><code>i[n] = t</code></td>
  1116. <td>Same as for <code>it [n]</code>.</td>
  1117. <td>Equivalent to <code>*(it + n) = t</code></td>
  1118. <td>&nbsp;</td>
  1119. </tr>
  1120. </tbody>
  1121. </table>
  1122. <h4>Complexity guarantees</h4>
  1123. <p>The complexity of operations on indexed random access Column/Row
  1124. iterators is guaranteed to be amortized constant time.</p>
  1125. <h4>Invariants</h4>
  1126. <table border="1" summary="invariants">
  1127. <tbody>
  1128. <tr>
  1129. <td>Symmetry of addition and subtraction</td>
  1130. <td>If <code>it + n</code> is well-defined, then <code>it += n; it
  1131. -= n;</code> and <code>(it + n) - n</code> are null operations.
  1132. Similarly, if <code>it - n</code> is well-defined, then <code>it -=
  1133. n; it += n;</code> and <code>(it - n) + n</code> are null
  1134. operations.</td>
  1135. </tr>
  1136. <tr>
  1137. <td>Relation between distance and addition</td>
  1138. <td>If <code>it1 - it2</code> is well-defined, then <code>it1 ==
  1139. it2 + (it1 - it2)</code>.</td>
  1140. </tr>
  1141. <tr>
  1142. <td>Reachability and distance</td>
  1143. <td>If <code>it1</code> is reachable from <code>it2</code>, then
  1144. <code>it1 - it2 &gt;= 0</code>.</td>
  1145. </tr>
  1146. </tbody>
  1147. </table>
  1148. <h4>Models</h4>
  1149. <ul>
  1150. <li><code>matrix::iterator1</code></li>
  1151. <li><code>matrix::iterator2</code></li>
  1152. </ul>
  1153. <hr />
  1154. <p>Copyright (&copy;) 2000-2002 Joerg Walter, Mathias Koch<br />
  1155. Use, modification and distribution are subject to the
  1156. Boost Software License, Version 1.0.
  1157. (See accompanying file LICENSE_1_0.txt
  1158. or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
  1159. http://www.boost.org/LICENSE_1_0.txt
  1160. </a>).
  1161. </p>
  1162. <script type="text/javascript">
  1163. (function($) {
  1164. $('#toc').toc();
  1165. })(jQuery);
  1166. </script>
  1167. </body>
  1168. </html>