2004-01-27 17:03:46 +00:00
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" lang = "en" >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
2004-11-02 14:31:27 +00:00
< meta name = "generator" content = "Docutils 0.3.6: http://docutils.sourceforge.net/" />
2004-01-27 17:03:46 +00:00
< title > Random Access Traversal Concept</ title >
< link rel = "stylesheet" href = "default.css" type = "text/css" />
</ head >
< body >
< h1 class = "title" > Random Access Traversal Concept</ h1 >
2004-11-02 14:31:27 +00:00
< div class = "document" id = "random-access-traversal-concept" >
2004-01-27 17:03:46 +00:00
< p > A class or built-in type < tt class = "literal" >< span class = "pre" > X</ span ></ tt > models the < em > Random Access Traversal</ em >
concept if the following expressions are valid and respect the stated
semantics. In the table below, < tt class = "literal" >< span class = "pre" > Distance</ span ></ tt > is
< tt class = "literal" >< span class = "pre" > iterator_traits< X> ::difference_type</ span ></ tt > and < tt class = "literal" >< span class = "pre" > n</ span ></ tt > represents a
constant object of type < tt class = "literal" >< span class = "pre" > Distance</ span ></ tt > .</ p >
2004-11-02 14:31:27 +00:00
< table border = "1" class = "table" >
2004-01-27 17:03:46 +00:00
< colgroup >
< col width = "28%" />
< col width = "30%" />
< col width = "23%" />
< col width = "20%" />
</ colgroup >
< thead valign = "bottom" >
< tr >< th colspan = "4" > Random Access Traversal Iterator Requirements (in addition to Bidirectional Traversal)</ th >
</ tr >
< tr >< th > Expression</ th >
< th > Return Type</ th >
< th > Operational Semantics</ th >
< th > Assertion/
Precondition</ th >
</ tr >
</ thead >
< tbody valign = "top" >
< tr >< td >< tt class = "literal" >< span class = "pre" > r</ span > < span class = "pre" > +=</ span > < span class = "pre" > n</ span ></ tt ></ td >
< td >< tt class = "literal" >< span class = "pre" > X& </ span ></ tt ></ td >
< td >< pre class = "first last literal-block" >
{
Distance m = n;
if (m > = 0)
while (m--)
++r;
else
while (m++)
--r;
return r;
}
</ pre >
</ td >
< td > </ td >
</ tr >
< tr >< td >< tt class = "literal" >< span class = "pre" > a</ span > < span class = "pre" > +</ span > < span class = "pre" > n</ span ></ tt > , < tt class = "literal" >< span class = "pre" > n</ span > < span class = "pre" > +</ span > < span class = "pre" > a</ span ></ tt ></ td >
< td >< tt class = "literal" >< span class = "pre" > X</ span ></ tt ></ td >
< td >< tt class = "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 >
< span class = "pre" > +=</ span > < span class = "pre" > n;</ span > < span class = "pre" > }</ span ></ tt ></ td >
< td > </ td >
</ tr >
< tr >< td >< tt class = "literal" >< span class = "pre" > r</ span > < span class = "pre" > -=</ span > < span class = "pre" > n</ span ></ tt ></ td >
< td >< tt class = "literal" >< span class = "pre" > X& </ span ></ tt ></ td >
< td >< tt class = "literal" >< span class = "pre" > return</ span > < span class = "pre" > r</ span > < span class = "pre" > +=</ span > < span class = "pre" > -n</ span ></ tt ></ td >
< td > </ td >
</ tr >
< tr >< td >< tt class = "literal" >< span class = "pre" > a</ span > < span class = "pre" > -</ span > < span class = "pre" > n</ span ></ tt ></ td >
< td >< tt class = "literal" >< span class = "pre" > X</ span ></ tt ></ td >
< td >< tt class = "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 >
< span class = "pre" > -=</ span > < span class = "pre" > n;</ span > < span class = "pre" > }</ span ></ tt ></ td >
< td > </ td >
</ tr >
< tr >< td >< tt class = "literal" >< span class = "pre" > b</ span > < span class = "pre" > -</ span > < span class = "pre" > a</ span ></ tt ></ td >
< td >< tt class = "literal" >< span class = "pre" > Distance</ span ></ tt ></ td >
< td >< tt class = "literal" >< span class = "pre" > a</ span > < span class = "pre" > < </ span > < span class = "pre" > b</ span > < span class = "pre" > ?</ span > < span class = "pre" > distance(a,b)</ span >
< span class = "pre" > :</ span > < span class = "pre" > -distance(b,a)</ span ></ tt ></ td >
< td > pre: there exists a
value < tt class = "literal" >< span class = "pre" > n</ span ></ tt > of
< tt class = "literal" >< span class = "pre" > Distance</ span ></ tt > such that
< tt class = "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 = "literal" >< span class = "pre" > b</ span >
< 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 >
</ tr >
< tr >< td >< tt class = "literal" >< span class = "pre" > a[n]</ span ></ tt ></ td >
< td > convertible to T</ td >
< td >< tt class = "literal" >< span class = "pre" > *(a</ span > < span class = "pre" > +</ span > < span class = "pre" > n)</ span ></ tt ></ td >
< td > pre: a is a < em > Readable
Iterator</ em ></ td >
</ tr >
< tr >< td >< tt class = "literal" >< span class = "pre" > a[n]</ span > < span class = "pre" > =</ span > < span class = "pre" > v</ span ></ tt ></ td >
< td > convertible to T</ td >
< td >< tt class = "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 >
< td > pre: a is a < em > Writable
iterator</ em ></ td >
</ tr >
< tr >< td >< tt class = "literal" >< span class = "pre" > a</ span > < span class = "pre" > < </ span > < span class = "pre" > b</ span ></ tt ></ td >
< td > convertible to < tt class = "literal" >< span class = "pre" > bool</ span ></ tt ></ td >
< td >< tt class = "literal" >< span class = "pre" > b</ span > < span class = "pre" > -</ span > < span class = "pre" > a</ span > < span class = "pre" > > </ span > < span class = "pre" > 0</ span ></ tt ></ td >
< td >< tt class = "literal" >< span class = "pre" > < </ span ></ tt > is a total
ordering relation</ td >
</ tr >
< tr >< td >< tt class = "literal" >< span class = "pre" > a</ span > < span class = "pre" > > </ span > < span class = "pre" > b</ span ></ tt ></ td >
< td > convertible to < tt class = "literal" >< span class = "pre" > bool</ span ></ tt ></ td >
< td >< tt class = "literal" >< span class = "pre" > b</ span > < span class = "pre" > < </ span > < span class = "pre" > a</ span ></ tt ></ td >
< td >< tt class = "literal" >< span class = "pre" > > </ span ></ tt > is a total
ordering relation</ td >
</ tr >
< tr >< td >< tt class = "literal" >< span class = "pre" > a</ span > < span class = "pre" > > =</ span > < span class = "pre" > b</ span ></ tt ></ td >
< td > convertible to < tt class = "literal" >< span class = "pre" > bool</ span ></ tt ></ td >
< td >< tt class = "literal" >< span class = "pre" > !(a</ span > < span class = "pre" > < </ span > < span class = "pre" > b)</ span ></ tt ></ td >
< td > </ td >
</ tr >
< tr >< td >< tt class = "literal" >< span class = "pre" > a</ span > < span class = "pre" > < =</ span > < span class = "pre" > b</ span ></ tt ></ td >
< td > convertible to < tt class = "literal" >< span class = "pre" > bool</ span ></ tt ></ td >
< td >< tt class = "literal" >< span class = "pre" > !(a</ span > < span class = "pre" > > </ span > < span class = "pre" > b)</ span ></ tt ></ td >
< td > </ td >
</ tr >
< tr >< td >< tt class = "literal" >< span class = "pre" > iterator_traversal< X> ::type</ span ></ tt ></ td >
< td > Convertible to
< tt class = "literal" >< span class = "pre" > random_access_traversal_tag</ span ></ tt ></ td >
< td > </ td >
< td > </ td >
</ tr >
</ tbody >
</ table >
</ div >
< hr class = "footer" />
< div class = "footer" >
< a class = "reference" href = "RandomAccessTraversal.rst" > View document source</ a > .
Generated by < a class = "reference" href = "http://docutils.sourceforge.net/" > Docutils</ a > from < a class = "reference" href = "http://docutils.sourceforge.net/rst.html" > reStructuredText</ a > source.
</ div >
</ body >
</ html >