Brian Silverman | f27e085 | 2018-08-04 23:56:45 -0700 | [diff] [blame^] | 1 | <html> |
| 2 | <head> |
| 3 | <meta content="text/html; charset=windows-1252" http-equiv="content-type"> |
| 4 | <title>arrays.html</title> |
| 5 | <link rel="stylesheet" type="text/css" href="../styles.css"> |
| 6 | </head> |
| 7 | <body> |
| 8 | <h4>Arrays</h4> |
| 9 | <div> An <i>array</i> is a data structure consisting of a two-element <i>tuple</i>. |
| 10 | The first element is the number of elements in the <i>array</i>. |
| 11 | The second element is another <i>tuple</i> of the elements in the <i>array</i>. |
| 12 | For example, </div> |
| 13 | <div class="code"> (<i>3</i>, (<i>a</i>, <i>b</i>, <i>c</i>)) </div> |
| 14 | <div> ...is an <i>array</i> of <i>3</i> elements--<i>a</i>, <i>b</i>, and |
| 15 | <i>c</i>. </div> |
| 16 | <div> The primary strength of <i>arrays</i> is that they store their own |
| 17 | size. Because of this, access to elements does not require the |
| 18 | size. It only requires that an element exists at a certain index. </div> |
| 19 | <div> This allows macro parameters to be variable in size and allows data |
| 20 | states to change size without the user explicitly keeping track of the |
| 21 | size independently.<br> |
| 22 | <br> |
| 23 | An <i>array </i>can be empty and have no elements. An empty array has a |
| 24 | 0 size. The notation for an empty array is '(0,())'.<br> |
| 25 | <br> |
| 26 | <span style="font-style: italic;"> </span></div> |
| 27 | <div>With variadic macro support a <i>tuple </i>has all of the |
| 28 | functionality as an <i>array</i>, knows its own size, and is easier |
| 29 | syntactically to use. Because of that an <i>array</i> should be used, as |
| 30 | opposed to a <i>tuple</i>, only if your compiler does not support |
| 31 | variadic macros. The only advantage an <i>array </i>has over a <i>tuple |
| 32 | </i>is that an <i>array </i>can be empty while a <i>tuple </i>always |
| 33 | has at least one element and therefore can never have a size of 0.<br> |
| 34 | <br> |
| 35 | Elements of an <i>array</i> can be extracted with <b>BOOST_PP_ARRAY_ELEM</b>, |
| 36 | an <i>array's</i> size can be extracted with <b>BOOST_PP_ARRAY_SIZE</b>, |
| 37 | and an <i>array</i> can be converted to the more primitive <i>tuple</i> |
| 38 | data structure with <b>BOOST_PP_ARRAY_DATA</b>. </div> |
| 39 | <h4>Primitives</h4> |
| 40 | <ul> |
| 41 | <li><a href="../ref/array_data.html">BOOST_PP_ARRAY_DATA</a></li> |
| 42 | <li><a href="../ref/array_elem.html">BOOST_PP_ARRAY_ELEM</a></li> |
| 43 | <li><a href="../ref/array_size.html">BOOST_PP_ARRAY_SIZE</a></li> |
| 44 | </ul> |
| 45 | <hr size="1"> |
| 46 | <div style="margin-left: 0px;"> <i>© Copyright <a href="http://www.housemarque.com" |
| 47 | target="_top">Housemarque Oy</a> 2002</i> <br> |
| 48 | <i>© Copyright Paul Mensonides 2002</i> </div> |
| 49 | <div style="margin-left: 0px;"> |
| 50 | <p><small>Distributed under the Boost Software License, Version 1.0. (See |
| 51 | accompanying file <a href="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> |
| 52 | or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</small></p> |
| 53 | </div> |
| 54 | </body> |
| 55 | </html> |