Compare commits

..

17 Commits

Author SHA1 Message Date
f18070dc23 This commit was manufactured by cvs2svn to create branch
'python-v2-dev'.

[SVN r14785]
2002-08-12 13:35:54 +00:00
b87433497e array5.cpp:
- Add (redundant) braces around initializer to silence GCC


[SVN r12528]
2002-01-27 18:22:19 +00:00
09c271cf34 array3.cpp:
- Qualify std::swap for compilers that don't have Koenig lookup

array5.cpp:
  - Don't use std::boolalpha, because it isn't portable


[SVN r12463]
2002-01-23 18:07:11 +00:00
f5699ae164 Fixed reverse iterator declarations so that they work with VC7b2.
[SVN r12173]
2001-12-29 12:33:32 +00:00
f96ac657dd update from Nico
[SVN r10918]
2001-08-23 20:33:35 +00:00
7f73413eed Fix some broken links. Fix order of constructor initializers.
[SVN r10913]
2001-08-23 17:42:07 +00:00
640d1434bf Change absolute URL's to relative
[SVN r10594]
2001-07-12 15:31:15 +00:00
624bd0e218 1.21.1 run up, including new download instructions and fix broken hyperlinks
[SVN r9557]
2001-03-14 15:11:55 +00:00
ad82e2b25c All final 1.20.2 changes, including fixing broken hyperlinks
[SVN r9071]
2001-02-10 14:42:14 +00:00
44887bfe59 Added changelog
[SVN r8662]
2001-01-21 05:02:37 +00:00
fd76085150 Fix for STLport on MSVC
[SVN r8660]
2001-01-20 22:58:11 +00:00
aac83e6667 Replaced boolalpha use with something that the stock gcc library can handle.
[SVN r8659]
2001-01-20 22:36:49 +00:00
a673bc6e82 Broken iterator fix needs to apply to the Intel compiler too, because it uses the MSVC library
[SVN r8639]
2001-01-18 21:20:42 +00:00
a91e96a8ab Docs fixes (Nico)+ add return 0; to test files (Beman)
[SVN r8496]
2000-12-27 02:03:29 +00:00
debb0f0908 libraries.htm and people.htm moved to sub-directories to make root directory cleaner.
[SVN r8166]
2000-11-10 15:39:05 +00:00
52dadb9764 Cosmetic changes from Nico
[SVN r7881]
2000-09-30 21:14:45 +00:00
b62e1aa4e7 Cosmetic changes from Nico
[SVN r7880]
2000-09-30 20:54:15 +00:00
16 changed files with 318 additions and 267 deletions

View File

@ -19,16 +19,16 @@
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;an&nbsp;STL&nbsp;container&nbsp;(as&nbsp;wrapper)&nbsp;for&nbsp;arrays&nbsp;of&nbsp;constant&nbsp;size.</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;an&nbsp;STL&nbsp;container&nbsp;(as&nbsp;wrapper)&nbsp;for&nbsp;arrays&nbsp;of&nbsp;constant&nbsp;size.</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;See</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;See</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.josuttis.com/cppcode</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.josuttis.com/cppcode">http://www.josuttis.com/cppcode</a></FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;for&nbsp;details&nbsp;and&nbsp;the&nbsp;latest&nbsp;version.</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;for&nbsp;details&nbsp;and&nbsp;the&nbsp;latest&nbsp;version.</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;(C)&nbsp;Copyright&nbsp;Nicolai&nbsp;M.&nbsp;Josuttis&nbsp;1999.</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;(C)&nbsp;Copyright&nbsp;Nicolai&nbsp;M.&nbsp;Josuttis&nbsp;2001.</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;Permission&nbsp;to&nbsp;copy,&nbsp;use,&nbsp;modify,&nbsp;sell&nbsp;and&nbsp;distribute&nbsp;this&nbsp;software</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;Permission&nbsp;to&nbsp;copy,&nbsp;use,&nbsp;modify,&nbsp;sell&nbsp;and&nbsp;distribute&nbsp;this&nbsp;software</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;is&nbsp;granted&nbsp;provided&nbsp;this&nbsp;copyright&nbsp;notice&nbsp;appears&nbsp;in&nbsp;all&nbsp;copies.</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;is&nbsp;granted&nbsp;provided&nbsp;this&nbsp;copyright&nbsp;notice&nbsp;appears&nbsp;in&nbsp;all&nbsp;copies.</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;This&nbsp;software&nbsp;is&nbsp;provided&nbsp;"as&nbsp;is"&nbsp;without&nbsp;express&nbsp;or&nbsp;implied</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;This&nbsp;software&nbsp;is&nbsp;provided&nbsp;"as&nbsp;is"&nbsp;without&nbsp;express&nbsp;or&nbsp;implied</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;warranty,&nbsp;and&nbsp;with&nbsp;no&nbsp;claim&nbsp;as&nbsp;to&nbsp;its&nbsp;suitability&nbsp;for&nbsp;any&nbsp;purpose.</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;warranty,&nbsp;and&nbsp;with&nbsp;no&nbsp;claim&nbsp;as&nbsp;to&nbsp;its&nbsp;suitability&nbsp;for&nbsp;any&nbsp;purpose.</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;Jul&nbsp;31,&nbsp;2000</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;Aug&nbsp;05,&nbsp;2001</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*/</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*/</FONT></I><BR>
#ifndef&nbsp;BOOST_ARRAY_HPP<BR> #ifndef&nbsp;BOOST_ARRAY_HPP<BR>
#define&nbsp;BOOST_ARRAY_HPP<BR> #define&nbsp;BOOST_ARRAY_HPP<BR>
@ -38,9 +38,7 @@
#include&nbsp;&lt;iterator&gt;<BR> #include&nbsp;&lt;iterator&gt;<BR>
#include&nbsp;&lt;algorithm&gt;<BR> #include&nbsp;&lt;algorithm&gt;<BR>
<BR> <BR>
<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;BUG-FIX&nbsp;for&nbsp;compilers&nbsp;that&nbsp;don't&nbsp;support</FONT></I><BR> <I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;FIXES&nbsp;for&nbsp;broken&nbsp;compilers</FONT></I><BR>
<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;std::size_t&nbsp;and&nbsp;std::ptrdiff_t&nbsp;yet</FONT></I><BR>
<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;(such&nbsp;as&nbsp;gcc)</FONT></I><BR>
#include&nbsp;&lt;<A href="../../boost/config.hpp">boost/config.hpp</A>&gt;<BR> #include&nbsp;&lt;<A href="../../boost/config.hpp">boost/config.hpp</A>&gt;<BR>
<BR> <BR>
namespace&nbsp;boost&nbsp;{<BR> namespace&nbsp;boost&nbsp;{<BR>
@ -67,8 +65,15 @@ namespace&nbsp;boost&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const_iterator&nbsp;end()&nbsp;const&nbsp;{&nbsp;return&nbsp;elems+N;&nbsp;}<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const_iterator&nbsp;end()&nbsp;const&nbsp;{&nbsp;return&nbsp;elems+N;&nbsp;}<BR>
<BR> <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;reverse&nbsp;iterator&nbsp;support</FONT></I><BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;reverse&nbsp;iterator&nbsp;support</FONT></I><BR>
#if&nbsp;!defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)&nbsp;&&&nbsp;!defined(BOOST_MSVC_STD_ITERATOR)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;std::reverse_iterator&lt;iterator&gt;&nbsp;reverse_iterator;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;std::reverse_iterator&lt;iterator&gt;&nbsp;reverse_iterator;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;std::reverse_iterator&lt;const_iterator&gt;&nbsp;const_reverse_iterator;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;std::reverse_iterator&lt;const_iterator&gt;&nbsp;const_reverse_iterator;<BR>
#else<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;workaround&nbsp;for&nbsp;broken&nbsp;reverse_iterator&nbsp;implementations</FONT></I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;std::reverse_iterator&lt;iterator,T&gt;&nbsp;reverse_iterator;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;std::reverse_iterator&lt;const_iterator,T&gt;&nbsp;const_reverse_iterator;<BR>
#endif<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reverse_iterator&nbsp;rbegin()&nbsp;{&nbsp;return&nbsp;reverse_iterator(end());&nbsp;}<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reverse_iterator&nbsp;rbegin()&nbsp;{&nbsp;return&nbsp;reverse_iterator(end());&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const_reverse_iterator&nbsp;rbegin()&nbsp;const&nbsp;{<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const_reverse_iterator&nbsp;rbegin()&nbsp;const&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;const_reverse_iterator(end());<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;const_reverse_iterator(end());<BR>
@ -98,7 +103,6 @@ namespace&nbsp;boost&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;size_type&nbsp;max_size()&nbsp;{&nbsp;return&nbsp;N;&nbsp;}<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;size_type&nbsp;max_size()&nbsp;{&nbsp;return&nbsp;N;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enum&nbsp;{&nbsp;static_size&nbsp;=&nbsp;N&nbsp;};<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enum&nbsp;{&nbsp;static_size&nbsp;=&nbsp;N&nbsp;};<BR>
<BR> <BR>
&nbsp;&nbsp;public:<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;swap&nbsp;(note:&nbsp;linear&nbsp;complexity)</FONT></I><BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;swap&nbsp;(note:&nbsp;linear&nbsp;complexity)</FONT></I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;swap&nbsp;(array&lt;T,N&gt;&&nbsp;y)&nbsp;{<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;swap&nbsp;(array&lt;T,N&gt;&&nbsp;y)&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::swap_ranges(begin(),end(),y.begin());<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::swap_ranges(begin(),end(),y.begin());<BR>
@ -120,7 +124,9 @@ namespace&nbsp;boost&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::fill_n(begin(),size(),value);<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::fill_n(begin(),size(),value);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR> <BR>
#ifndef&nbsp;BOOST_NO_PRIVATE_IN_AGGREGATE<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private:<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private:<BR>
#endif<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;check&nbsp;range&nbsp;(may&nbsp;be&nbsp;private&nbsp;because&nbsp;it&nbsp;is&nbsp;static)</FONT></I><BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;check&nbsp;range&nbsp;(may&nbsp;be&nbsp;private&nbsp;because&nbsp;it&nbsp;is&nbsp;static)</FONT></I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;rangecheck&nbsp;(size_type&nbsp;i)&nbsp;{<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;rangecheck&nbsp;(size_type&nbsp;i)&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(i&nbsp;&gt;=&nbsp;size())&nbsp;{&nbsp;throw&nbsp;std::range_error("array");&nbsp;}<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(i&nbsp;&gt;=&nbsp;size())&nbsp;{&nbsp;throw&nbsp;std::range_error("array");&nbsp;}<BR>

View File

@ -1,315 +1,330 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html> <html>
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Keywords" content="array, block, carray, c_array, array wrapper, adapter, adaptor, STL, C++ Standard Library, array.hpp"> <meta name="Keywords" content="array, block, carray, c_array, array wrapper, adapter, adaptor, STL, C++ Standard Library, array.hpp">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>array.hpp, an STL Array Wrapper</title> <title>array.hpp, an STL Array Wrapper</title>
</head> </head>
<body text="#000000" bgcolor="#FFFFFF" link="#186ABF"> <body text="#000000" bgcolor="#FFFFFF" link="#186ABF">
<font face="Arial, Helvetica, sans-serif">&nbsp; </font>
<font face="Arial, Helvetica, sans-serif">&nbsp;</font>
<table width="100%" height="40"> <table width="100%" height="40">
<tr> <tr>
<td bgcolor="#DDDDDD"><b><font face="Arial,helvetica" color="#000000" size="+1">Class <td BGCOLOR="#DDDDDD"><b><font face="Arial,helvetica" color="#000000" size="+1">Class
<font face="Courier New, Courier, mono">array</font>, an STL Container (as <font face="Courier New, Courier, mono">array</font>, an STL Container (as
Wrapper) for Arrays of Constant Size</font></b></td> Wrapper) for Arrays of Constant Size</font></b></td>
</tr> </tr>
</table> </table>
<p><font face="Arial, Helvetica, sans-serif" size="-1">The C++ Standard Template <p><font size="-1" face="Arial, Helvetica, sans-serif">[<a href="#intro">intro</a>]
Library STL as part of the C++ Standard Library provides a framework for [<a href="#interface">interface</a>] [<a href="#discussion">discussion</a>]
processing algorithms on different kind of containers. However, ordinary arrays [<a href="#code">code</a>]</font>
don't provide the interface of STL containers (although, they provide the <p><font face="Arial, Helvetica, sans-serif" size="-1"><a name="intro"></a>The
iterator interface of STL containers).</font> C++ Standard Template Library STL as part of the C++ Standard Library provides
<p><font face="Arial, Helvetica, sans-serif" size="-1">As replacement for a framework for processing algorithms on different kind of containers. However,
ordinary arrays, the STL provides class <font face="Courier New, Courier, mono">vector&lt;&gt;</font>. ordinary arrays don't provide the interface of STL containers (although, they
However, <font face="Courier New, Courier, mono">vector&lt;&gt;</font> provides provide the iterator interface of STL containers).</font>
the semantics of dynamic arrays. Thus, it manages data to be able to change the <p><font face="Arial, Helvetica, sans-serif" size="-1">As replacement for ordinary
number of elements. This results in some overhead in case only arrays with arrays, the STL provides class <font face="Courier New, Courier, mono">vector&lt;&gt;</font>.
static size are needed.</font> However, <font face="Courier New, Courier, mono">vector&lt;&gt;</font> provides
<p><font face="Arial, Helvetica, sans-serif" size="-1">In his book, <i>Generic the semantics of dynamic arrays. Thus, it manages data to be able to change
Programming and the STL</i>, Matthew H. Austern introduces a useful wrapper the number of elements. This results in some overhead in case only arrays with
class for ordinary arrays with static size, called <font face="Courier New, Courier, mono"><b>block</b></font>. static size are needed.</font>
It is safer and has no worse performance than ordinary arrays. In <i>The C++ <p><font face="Arial, Helvetica, sans-serif" size="-1">In his book, <i>Generic
Programming Language</i>, 3rd edition, Bjarne Stroustrup introduces a similar Programming and the STL</i>, Matthew H. Austern introduces a useful wrapper
class, called <font face="Courier New, Courier, mono"><b>c_array</b></font>, class for ordinary arrays with static size, called <font face="Courier New, Courier, mono"><b>block</b></font>.
which I (<a href="http://www.josuttis.com">Nicolai Josuttis</a>) present It is safer and has no worse performance than ordinary arrays. In <i>The C++
slightly modified in my book <i>The C++ Standard Library - A Tutorial and Programming Language</i>, 3rd edition, Bjarne Stroustrup introduces a similar
Reference</i>, called <font face="Courier New, Courier, mono"><b>carray</b></font>. class, called <font face="Courier New, Courier, mono"><b>c_array</b></font>,
This is the essence of these approaches spiced with many feedback from <a href="http://www.boost.org">boost</a>.</font> which I (<a href="http://www.josuttis.com">Nicolai Josuttis</a>) present slightly
<p><font face="Arial, Helvetica, sans-serif" size="-1">After considering modified in my book <i>The C++ Standard Library - A Tutorial and Reference</i>,
different names, we decided to name this class simply <font face="Courier New, Courier, mono"><b>array</b></font>.</font> called <font face="Courier New, Courier, mono"><b>carray</b></font>. This is
<p><font face="Arial, Helvetica, sans-serif" size="-1">The class provides the the essence of these approaches spiced with many feedback from <a href="http://www.boost.org">boost</a>.</font>
following interface:</font> <p><font face="Arial, Helvetica, sans-serif" size="-1">After considering different
names, we decided to name this class simply <font face="Courier New, Courier, mono"><b>array</b></font>.</font>
<p><font face="Arial, Helvetica, sans-serif" size="-1"><a name="interface"></a>The
class provides the following interface:</font>
<table border="0"> <table border="0">
<tr> <tr>
<td><font face="Arial, Helvetica, sans-serif" size="-1"><b>Types:</b></font></td> <td><font face="Arial, Helvetica, sans-serif" size="-1"><b>Types:</b></font></td>
<td><font size="-1"></font></td> <td><font size="-1"></font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">value_type</font></td> <td><font face="Courier New, Courier, mono" size="-1">value_type</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">type of the elements</font></td> <td><font face="Arial, Helvetica, sans-serif" size="-1">type of the elements</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">iterator</font></td> <td><font face="Courier New, Courier, mono" size="-1">iterator</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">type of the iterator <td><font face="Arial, Helvetica, sans-serif" size="-1">type of the iterator
(random-access iterator)</font></td> (random-access iterator)</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">const_iterator</font></td> <td><font face="Courier New, Courier, mono" size="-1">const_iterator</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">type of iterator <td><font face="Arial, Helvetica, sans-serif" size="-1">type of iterator that
considers elements as being constant</font></td>
</tr>
<tr>
<td><font face="Courier New, Courier, mono" size="-1">reference</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">type of element reference</font></td>
</tr>
<tr>
<td><font face="Courier New, Courier, mono" size="-1">const_reference</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">type of element reference
that considers elements as being constant</font></td> that considers elements as being constant</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">reference</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">type of element
reference</font></td>
</tr>
<tr>
<td><font face="Courier New, Courier, mono" size="-1">const_reference</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">type of element
reference that considers elements as being constant</font></td>
</tr>
<tr>
<td><font face="Courier New, Courier, mono" size="-1">size_type</font></td> <td><font face="Courier New, Courier, mono" size="-1">size_type</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">type for signed size <td><font face="Arial, Helvetica, sans-serif" size="-1">type for signed size
values</font></td> values</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">difference_type</font></td> <td><font face="Courier New, Courier, mono" size="-1">difference_type</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">type for unsigned <td><font face="Arial, Helvetica, sans-serif" size="-1">type for unsigned
difference values</font></td> difference values</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Arial, Helvetica, sans-serif" size="-1"><b>Operations:</b></font></td> <td><font face="Arial, Helvetica, sans-serif" size="-1"><b>Operations:</b></font></td>
<td><font size="-1"></font></td> <td><font size="-1"></font></td>
</tr> </tr>
<tr> <tr>
<td> <td>
<p><font face="Courier New, Courier, mono" size="-1">array&lt;<i>type</i>,<i>num</i>&gt;</font></p> <p><font face="Courier New, Courier, mono" size="-1">array&lt;<i>type</i>,<i>num</i>&gt;</font></p>
</td> </td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">default constructor, <td><font face="Arial, Helvetica, sans-serif" size="-1">default constructor,
creates array of <i><font face="Courier New, Courier, mono">num</font></i> creates array of <i><font face="Courier New, Courier, mono">num</font></i>
element of <i><font face="Courier New, Courier, mono">type</font></i>, see element of <i><font face="Courier New, Courier, mono">type</font></i>, see
comment below</font></td> comment below</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">array&lt;<i>type</i>,<i>num</i>&gt;(<i>a</i>)</font></td> <td><font face="Courier New, Courier, mono" size="-1">array&lt;<i>type</i>,<i>num</i>&gt;(<i>a</i>)</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">copy constructor, <td><font face="Arial, Helvetica, sans-serif" size="-1">copy constructor,
copies all elements of <i><font face="Courier New, Courier, mono">a</font></i> copies all elements of <i><font face="Courier New, Courier, mono">a</font></i>
(<i><font face="Courier New, Courier, mono">a</font></i> must have same <i><font face="Courier New, Courier, mono">type</font></i><font face="Courier New, Courier, mono"><font face="Arial, Helvetica, sans-serif"> (<i><font face="Courier New, Courier, mono">a</font></i> must have same
<i> <font face="Courier New, Courier, mono">type</font></i><font face="Courier New, Courier, mono"><font face="Arial, Helvetica, sans-serif">
and </font></font><i><font face="Courier New, Courier, mono">num</font></i>)</font></td> and </font></font><i><font face="Courier New, Courier, mono">num</font></i>)</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">operator=</font></td> <td><font face="Courier New, Courier, mono" size="-1">operator=</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">assignment, assigns <td><font face="Arial, Helvetica, sans-serif" size="-1">assignment, assigns
all elements</font></td> all elements</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">assign(<i>val</i>)</font></td> <td><font face="Courier New, Courier, mono" size="-1">assign(<i>val</i>)</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">assigns <i>val</i> <td><font face="Arial, Helvetica, sans-serif" size="-1">assigns <i>val</i>
to all elements</font></td> to all elements</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">begin()</font></td> <td><font face="Courier New, Courier, mono" size="-1">begin()</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">returns iterator for <td><font face="Arial, Helvetica, sans-serif" size="-1">returns iterator for
the first element</font></td> the first element</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">end()</font></td> <td><font face="Courier New, Courier, mono" size="-1">end()</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">returns iterator for <td><font face="Arial, Helvetica, sans-serif" size="-1">returns iterator for
position after the last element</font></td> position after the last element</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">rbegin()</font></td> <td><font face="Courier New, Courier, mono" size="-1">rbegin()</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">returns reverse <td><font face="Arial, Helvetica, sans-serif" size="-1">returns reverse iterator
iterator for position of first element of reverse iteration</font></td> for position of first element of reverse iteration</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">rend()</font></td> <td><font face="Courier New, Courier, mono" size="-1">rend()</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">returns reverse <td><font face="Arial, Helvetica, sans-serif" size="-1">returns reverse iterator
iterator for posistion behind last element of reverese iteration</font></td> for position behind last element of reverse iteration </font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">operator[<i>i</i>]</font></td> <td><font face="Courier New, Courier, mono" size="-1">operator[<i>i</i>]</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">returns element with <td><font face="Arial, Helvetica, sans-serif" size="-1">returns element with
index <i><font face="Courier New, Courier, mono">i</font></i> (no range index <i><font face="Courier New, Courier, mono">i</font></i> (no range
checking)</font></td> checking)</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">at(<i>i</i>)</font></td> <td><font face="Courier New, Courier, mono" size="-1">at(<i>i</i>)</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">returns element with <td><font face="Arial, Helvetica, sans-serif" size="-1">returns element with
index <font face="Courier New, Courier, mono"><i>i</i></font> (throw index <font face="Courier New, Courier, mono"><i>i</i></font> (throw std::range_error
std::range_error if <i><font face="Courier New, Courier, mono">i</font></i> if <i><font face="Courier New, Courier, mono">i</font></i> is not valid)</font></td>
is not valid)</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">front()</font></td> <td><font face="Courier New, Courier, mono" size="-1">front()</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">returns first <td><font face="Arial, Helvetica, sans-serif" size="-1">returns first element
element (caller has to ensure that it exists)</font></td>
</tr>
<tr>
<td><font face="Courier New, Courier, mono" size="-1">back()</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">returns last element
(caller has to ensure that it exists)</font></td> (caller has to ensure that it exists)</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">back()</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">returns last element
(caller has to ensure that it exists)</font></td>
</tr>
<tr>
<td><font face="Courier New, Courier, mono" size="-1">data()</font></td> <td><font face="Courier New, Courier, mono" size="-1">data()</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">returns raw element <td><font face="Arial, Helvetica, sans-serif" size="-1">returns raw element
array for read-only element access</font></td> array for read-only element access</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">size()</font></td> <td><font face="Courier New, Courier, mono" size="-1">size()</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">returns number of <td><font face="Arial, Helvetica, sans-serif" size="-1">returns number of
elements</font></td> elements</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">empty()</font></td> <td><font face="Courier New, Courier, mono" size="-1">empty()</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">returns whether <td><font face="Arial, Helvetica, sans-serif" size="-1">returns whether array
array is empty</font></td> is empty</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">max_size()</font></td> <td><font face="Courier New, Courier, mono" size="-1">max_size()</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">returns maximum <td><font face="Arial, Helvetica, sans-serif" size="-1">returns maximum possible
possible number of elements (same as size())</font></td> number of elements (same as size())</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">swap(a)</font></td> <td><font face="Courier New, Courier, mono" size="-1">swap(a)</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">swap elements with <td><font face="Arial, Helvetica, sans-serif" size="-1">swap elements with
array a</font></td> array a</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">==<font face="Arial, Helvetica, sans-serif">, <td><font face="Courier New, Courier, mono" size="-1">==<font face="Arial, Helvetica, sans-serif">,
</font>!=</font></td> </font>!=</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">checks for equality</font></td> <td><font face="Arial, Helvetica, sans-serif" size="-1">checks for equality</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">&lt;<font face="Arial, Helvetica, sans-serif">, <td><font face="Courier New, Courier, mono" size="-1">&lt;<font face="Arial, Helvetica, sans-serif">,
</font>&lt;=<font face="Arial, Helvetica, sans-serif">, </font>&gt;<font face="Arial, Helvetica, sans-serif">, </font>&lt;=<font face="Arial, Helvetica, sans-serif">, </font>&gt;<font face="Arial, Helvetica, sans-serif">,
</font>&gt;=</font></td> </font>&gt;=</font></td>
<td><font face="Arial, Helvetica, sans-serif" size="-1">compares array</font></td> <td><font face="Arial, Helvetica, sans-serif" size="-1">compares array</font></td>
</tr> </tr>
<tr> <tr>
<td><font face="Arial, Helvetica, sans-serif" size="-1"><b>Values:</b></font></td> <td><font face="Arial, Helvetica, sans-serif" size="-1"><b>Values:</b></font></td>
<td>&nbsp;</td> <td>&nbsp;</td>
</tr> </tr>
<tr> <tr>
<td><font face="Courier New, Courier, mono" size="-1">static_size</font></td> <td><font face="Courier New, Courier, mono" size="-1">static_size</font></td>
<td><font size="-1" face="Arial, Helvetica, sans-serif">yields size at <td><font size="-1" face="Arial, Helvetica, sans-serif">yields size at compile
compile time</font></td> time</font></td>
</tr> </tr>
</table> </table>
<p><font face="Arial, Helvetica, sans-serif" size="-1">Class array fulfills most <p><font face="Arial, Helvetica, sans-serif" size="-1"><a name="discussion"></a>Class
but not all of the requirements of &quot;reversible containers&quot; (see array fulfills most but not all of the requirements of &quot;reversible containers&quot;
Section 23.1, [lib.container.requirements] of the C++ Standard). The reasons (see Section 23.1, [lib.container.requirements] of the C++ Standard). The reasons
array is not an reversible STL container is because:</font><font face="Arial, Helvetica, sans-serif" size="-1"><br> array is not an reversible STL container is because: </font> <font face="Arial, Helvetica, sans-serif" size="-1"><br>
- No constructors are provided<br> - No constructors are provided<br>
- Elements may have an indetermined initial value (see below)<br> - Elements may have an undetermined initial value (see below)<br>
- swap() has no constant complexity<br> - swap() has no constant complexity<br>
- size() is always constant, based on the second template argument of the type<br> - size() is always constant, based on the second template argument of the type<br>
- The container provides no allocator support</font> - The container provides no allocator support</font>
<p><font face="Arial, Helvetica, sans-serif" size="-1">It doesn't fulfill the <p><font face="Arial, Helvetica, sans-serif" size="-1">It doesn't fulfill the
requirements of a &quot;sequence&quot; (see Section 23.1.1, [lib.sequence.reqmts] requirements of a &quot;sequence&quot; (see Section 23.1.1, [lib.sequence.reqmts]
of the C++ Standard), except that</font><font face="Arial, Helvetica, sans-serif" size="-1"><br> of the C++ Standard), except that</font> <font face="Arial, Helvetica, sans-serif" size="-1"><br>
- front() and back() are provided<br> - front() and back() are provided<br>
- operator[] and at() are provided</font> - operator[] and at() are provided</font>
<p><font face="Arial, Helvetica, sans-serif" size="-1">Regarding the <p><font face="Arial, Helvetica, sans-serif" size="-1">Regarding the constructors
constructors there was an important design tradeoff: We could implement array as there was an important design tradeoff: We could implement array as an &quot;<b>aggregate</b>&quot;
an &quot;<b>aggregate</b>&quot; (see Section 8.5.1, [dcl.init.aggr], of the C++ (see Section 8.5.1, [dcl.init.aggr], of the C++ Standard). This would mean:</font></p>
Standard). This would mean:</font></p>
<ul> <ul>
<li><font face="Arial, Helvetica, sans-serif" size="-1">An array can be <li><font face="Arial, Helvetica, sans-serif" size="-1">An array can be initialized
initialized with a brace-enclosing, comma-separated list of initializers for with a brace-enclosing, comma-separated list of initializers for the elements
the elements of the container, written in increasing subscript order:</font> of the container, written in increasing subscript order:</font>
<blockquote> <blockquote>
<p><font face="Arial, Helvetica, sans-serif" size="-1">boost::array&lt;int,4&gt; <p><font face="Arial, Helvetica, sans-serif" size="-1">boost::array&lt;int,4&gt;
a = { { 1, 2, 3 } };</font></p> a = { { 1, 2, 3 } };</font></p>
</blockquote> </blockquote>
<p><font face="Arial, Helvetica, sans-serif" size="-1">Note that if there <p><font face="Arial, Helvetica, sans-serif" size="-1">Note that if there
are fewer elements in the initializer list, then each remaining element gets are fewer elements in the initializer list, then each remaining element
default-initialized (thus, it has a defined value).</font></p> gets default-initialized (thus, it has a defined value).</font></p>
</li> </li>
<li><font face="Arial, Helvetica, sans-serif" size="-1">However, <b>passing no <li><font face="Arial, Helvetica, sans-serif" size="-1">However, <b>passing
initializer list means that the elements have an indetermined initial value</b>.</font></li> no initializer list means that the elements have an indetermined initial value</b>.</font></li>
<li><font face="Arial, Helvetica, sans-serif" size="-1">It has no <li><font face="Arial, Helvetica, sans-serif" size="-1">It has no user-declared
user-declared constructors.</font></li> constructors.</font></li>
<li><font face="Arial, Helvetica, sans-serif" size="-1">It has no private or <li><font face="Arial, Helvetica, sans-serif" size="-1">It has no private or
protected non-static data members.</font></li> protected non-static data members.</font></li>
<li><font face="Arial, Helvetica, sans-serif" size="-1">It has no base <li><font face="Arial, Helvetica, sans-serif" size="-1">It has no base classes.</font></li>
classes.</font></li> <li><font face="Arial, Helvetica, sans-serif" size="-1">It has no virtual functions.</font></li>
<li><font face="Arial, Helvetica, sans-serif" size="-1">It has no virtual
functions.</font></li>
</ul> </ul>
<p><font face="Arial, Helvetica, sans-serif" size="-1">The current <p><font face="Arial, Helvetica, sans-serif" size="-1">The current implementation
implementation useus this approach. However, being able to have indetermined uses this approach. However, being able to have indeterminate initial values
initial values is a big drawback. So, please give me some feedback, how useful is a big drawback. So, please give me some feedback, how useful you consider
you consider this feature to be. This leads to the list of <b>Open issues:</b></font> this feature to be. This leads to the list of <b>Open issues:</b></font>
<ul> <ul>
<li><font face="Arial, Helvetica, sans-serif">Do we want initializer list <li><font face="Arial, Helvetica, sans-serif" size="-1">Do we want initializer
support or would the following be OK?:</font> list support or would the following be OK?:</font>
<blockquote> <blockquote>
<p><font face="Courier New, Courier, mono">int data[] = { 1, 2, 3, 4 }</font></p> <p><font face="Courier New, Courier, mono" size="-1">int data[] = { 1, 2,
<p><font face="Courier New, Courier, mono">array&lt;int,5&gt; x(data); <font face="Arial, Helvetica, sans-serif">or 3, 4 }</font></p>
</font>&nbsp;&nbsp;array&lt;int,data&gt; x;</font></p> <p><font face="Courier New, Courier, mono" size="-1">array&lt;int,5&gt;
x(data); <font face="Arial, Helvetica, sans-serif">or </font>&nbsp;&nbsp;array&lt;int,data&gt;
x;</font></p>
</blockquote> </blockquote>
</li> </li>
<li><font face="Arial, Helvetica, sans-serif">Could &quot;<font face="Courier New, Courier, mono">{ <li><font face="Arial, Helvetica, sans-serif" size="-1">Could &quot;<font face="Courier New, Courier, mono">{
</font>...<font face="Courier New, Courier, mono"> }</font>&quot; be used </font>...<font face="Courier New, Courier, mono"> }</font>&quot; be used
portably instead of &quot;<font face="Courier New, Courier, mono">{ { </font>...<font face="Courier New, Courier, mono"> portably instead of &quot;<font face="Courier New, Courier, mono">{ { </font>...<font face="Courier New, Courier, mono">
} }</font>&quot; to initialize values?</font></li> } }</font>&quot; to initialize values?</font> </li>
<blockquote> <blockquote>
<p><font face="Arial, Helvetica, sans-serif">8.5.1 (11) of the Standard seem <p><font face="Arial, Helvetica, sans-serif" size="-1">8.5.1 (11) of the Standard
to allow it; however, gcc 2.95.2 printa warning message.</font></p> seems to allow it; however, gcc 2.95.2 prints a warning message.</font></p>
</blockquote> </blockquote>
<li><font face="Arial, Helvetica, sans-serif">Any way to have determined <li><font face="Arial, Helvetica, sans-serif" size="-1">Any way to have determinate
initial values and initializer list support?</font></li> initial values and initializer list support?</font></li>
<li><font face="Arial, Helvetica, sans-serif">Static_casts for reverse <li><font face="Arial, Helvetica, sans-serif" size="-1">Static_casts for reverse
iterator stuff</font><font face="Arial, Helvetica, sans-serif">?</font></li> iterator stuff?</font></li>
</ul> </ul>
<p><font face="Arial, Helvetica, sans-serif">I'd appreciate any constructive <a href="mailto:solutions@josuttis.com">feedback</a>. <p><font face="Arial, Helvetica, sans-serif" size="-1">I'd appreciate any constructive
<b>Please note: I don't have time to read all boost mails. Thus, to make sure <a href="mailto:solutions@josuttis.com">feedback</a>. <b>Please note: I don't
that feedback arrives me, please send me a copy of each mail regarding this have time to read all boost mails. Thus, to make sure that feedback arrives
class.</b></font> me, please send me a copy of each mail regarding this class.</b></font>
<p><font face="Arial, Helvetica, sans-serif">The code is provided &quot;as <p><font face="Arial, Helvetica, sans-serif"><a name="code"></a>The code is provided
is&quot; without expressed or implied warranty.</font> "as is" without expressed or implied warranty.</font>
<p><font face="Arial, Helvetica, sans-serif"><b>array.hpp</b>, the <p><font face="Arial, Helvetica, sans-serif"><b>array.hpp</b>, the implementation
implementation of <font face="Courier New, Courier, mono">array&lt;&gt;</font><b>:</b> of <font face="Courier New, Courier, mono">array&lt;&gt;</font><b>:</b> </font>
</font><font face="Arial, Helvetica, sans-serif"><a href="array.hpp.html">as <li><font face="Arial, Helvetica, sans-serif">
HTML file</a></font> <font face="Arial, Helvetica, sans-serif"><a href="../../boost/array.hpp">as <a href="array.hpp.html">as HTML file</a></font></li>
plain file</a></font> <li><font face="Arial, Helvetica, sans-serif">
<p><font face="Arial, Helvetica, sans-serif">Simple Example for using <font face="Courier New, Courier, mono">array&lt;&gt;<font face="Arial, Helvetica, sans-serif">:</font></font></font> <a href="../../boost/array.hpp">as plain file</a></font></li>
<font face="Arial, Helvetica, sans-serif"><a href="array1.cpp.html">as HTML file</a></font> <p> <font face="Arial, Helvetica, sans-serif"><b>array1.cpp</b>, a simple example
<font face="Arial, Helvetica, sans-serif"><a href="array1.cpp">as plain file</a></font> for using <font face="Courier New, Courier, mono">array&lt;&gt;<font face="Arial, Helvetica, sans-serif">:</font></font></font>
<p><font face="Arial, Helvetica, sans-serif">Another Example for using <font face="Courier New, Courier, mono">array&lt;&gt;<font face="Arial, Helvetica, sans-serif">:</font></font></font> <li><font face="Arial, Helvetica, sans-serif">
<font face="Arial, Helvetica, sans-serif"><a href="array2.cpp.html">as HTML file</a></font> <a href="array1.cpp.html">as HTML file</a></font> </li>
<font face="Arial, Helvetica, sans-serif"><a href="array2.cpp">as plain file</a></font> <li><font face="Arial, Helvetica, sans-serif">
<p><font face="Arial, Helvetica, sans-serif">A third Example for using <font face="Courier New, Courier, mono">array&lt;&gt;<font face="Arial, Helvetica, sans-serif">:</font></font></font> <a href="array1.cpp">as plain file</a></font></li>
<font face="Arial, Helvetica, sans-serif"><a href="array3.cpp.html">as HTML file</a></font> <p> <font face="Arial, Helvetica, sans-serif"><b>array2.cpp</b>, another example
<font face="Arial, Helvetica, sans-serif"><a href="array3.cpp">as plain file</a></font> for using <font face="Courier New, Courier, mono">array&lt;&gt;<font face="Arial, Helvetica, sans-serif">:</font></font></font>
<p><font face="Arial, Helvetica, sans-serif">An Example for using <font face="Courier New, Courier, mono">array</font>s <li><font face="Arial, Helvetica, sans-serif">
of <font face="Courier New, Courier, mono">array</font>s<font face="Courier New, Courier, mono"><font face="Arial, Helvetica, sans-serif">:</font></font></font> <a href="array2.cpp.html">as HTML file</a></font></li>
<font face="Arial, Helvetica, sans-serif"><a href="array4.cpp.html">as HTML file</a></font> <li><font face="Arial, Helvetica, sans-serif">
<font face="Arial, Helvetica, sans-serif"><a href="array4.cpp">as plain file</a></font> <a href="array2.cpp">as plain file</a></font></li>
<p><font face="Arial, Helvetica, sans-serif">An Example for testing other <p> <font face="Arial, Helvetica, sans-serif"><b>array3.cpp</b>, a third example
operations of <font face="Courier New, Courier, mono">array&lt;&gt;</font><font face="Courier New, Courier, mono"><font face="Arial, Helvetica, sans-serif">:</font></font></font> for using <font face="Courier New, Courier, mono">array&lt;&gt;<font face="Arial, Helvetica, sans-serif">:</font></font></font>
<font face="Arial, Helvetica, sans-serif"><a href="array5.cpp.html">as HTML file</a></font> <li><font face="Arial, Helvetica, sans-serif">
<font face="Arial, Helvetica, sans-serif"><a href="array5.cpp">as plain file</a></font> <a href="array3.cpp.html">as HTML file</a></font></li>
<p><font face="Arial, Helvetica, sans-serif">To find more details about using <li><font face="Arial, Helvetica, sans-serif">
ordinary arrays in C++ and the framework of the STL, see e.g.</font><font face="Arial, Helvetica, sans-serif"><br> <a href="array3.cpp">as plain file</a></font></li>
<i>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.josuttis.com/libbook/">The C++ <p> <font face="Arial, Helvetica, sans-serif"><b>array4.cpp</b>, an example for
Standard Library - A Tutorial and Reference</a></i><br> using <font face="Courier New, Courier, mono">array</font>s of <font face="Courier New, Courier, mono">array</font>s<font face="Courier New, Courier, mono"><font face="Arial, Helvetica, sans-serif">:</font></font></font>
&nbsp;&nbsp;&nbsp;&nbsp; by <a href="http://www.josuttis.com" target="_top">Nicolai <li><font face="Arial, Helvetica, sans-serif"> <a href="array4.cpp.html">as HTML
M. Josuttis</a></font><font face="Arial, Helvetica, sans-serif"><br> file</a></font></li>
&nbsp;&nbsp;&nbsp;&nbsp; Addison Wesley Longman, 1999</font><font face="Arial, Helvetica, sans-serif"><br> <li><font face="Arial, Helvetica, sans-serif"> <a href="array4.cpp">as plain file</a></font></li>
&nbsp;&nbsp;&nbsp;&nbsp; ISBN 0-201-37926-0</font><font face="Arial, Helvetica, sans-serif"><br> <p><font face="Arial, Helvetica, sans-serif"><b>array5.cpp</b>, an example for
</font> testing other operations of <font face="Courier New, Courier, mono">array&lt;&gt;<font face="Arial, Helvetica, sans-serif">:</font></font></font>
<p><font face="Arial, Helvetica, sans-serif"><a href="http://www.josuttis.com/" target="_top">Home <li><font face="Arial, Helvetica, sans-serif"> <a href="array5.cpp.html">as HTML
Page of Nicolai Josuttis</a></font><font face="Arial, Helvetica, sans-serif"><br> file</a></font></li>
&nbsp;</font> <li><font face="Arial, Helvetica, sans-serif"> <a href="array5.cpp">as plain file</a></font></li>
<br>
<br>
<font face="Arial, Helvetica, sans-serif">
To find more details about using ordinary arrays in C++ and the framework of
the STL, see e.g.</font> <font face="Arial, Helvetica, sans-serif"><br>
<i>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.josuttis.com/libbook/">The C++
Standard Library - A Tutorial and Reference</a></i> <br>
&nbsp;&nbsp;&nbsp;&nbsp; by <a href="http://www.josuttis.com" target="_top">Nicolai
M. Josuttis</a></font> <font face="Arial, Helvetica, sans-serif"><br>
&nbsp;&nbsp;&nbsp;&nbsp; Addison Wesley Longman, 1999</font> <font face="Arial, Helvetica, sans-serif"><br>
&nbsp;&nbsp;&nbsp;&nbsp; ISBN 0-201-37926-0</font> <font face="Arial, Helvetica, sans-serif"><br>
</font></li>
<p><font face="Arial, Helvetica, sans-serif"><a href="http://www.josuttis.com/" TARGET="_top">Home
Page of Nicolai Josuttis</a></font><font face="Arial, Helvetica, sans-serif">
</font>
<p><font size="-1" face="Arial, Helvetica, sans-serif">[<a href="#intro">intro</a>]
[<a href="#interface">interface</a>] [<a href="#discussion">discussion</a>]
[<a href="#code">code</a>]</font>
<p><font face="Arial, Helvetica, sans-serif" size="-1"></font>
<p><font face="Arial, Helvetica, sans-serif">&nbsp; </font>
</body> </body>
</html> </html>

View File

@ -1,4 +1,8 @@
/* simple example for using class array<> /* simple example for using class array<>
*
* Changelog:
* 20 Jan 2001 - Removed boolalpha use since stock GCC doesn't support it
* (David Abrahams)
*/ */
#include <iostream> #include <iostream>
#include <boost/array.hpp> #include <boost/array.hpp>
@ -18,7 +22,7 @@ int main()
// use some common STL container operations // use some common STL container operations
std::cout << "size: " << a.size() << std::endl; std::cout << "size: " << a.size() << std::endl;
std::cout << "empty: " << std::boolalpha << a.empty() << std::endl; std::cout << "empty: " << (a.empty() ? "true" : "false") << std::endl;
std::cout << "max_size: " << a.max_size() << std::endl; std::cout << "max_size: " << a.max_size() << std::endl;
std::cout << "front: " << a.front() << std::endl; std::cout << "front: " << a.front() << std::endl;
std::cout << "back: " << a.back() << std::endl; std::cout << "back: " << a.back() << std::endl;
@ -36,11 +40,13 @@ int main()
c = a; c = a;
if (a==b && a==c) { if (a==b && a==c) {
std::cout << "copy construction and copy assignment are OK" std::cout << "copy construction and copy assignment are OK"
<< std::endl; << std::endl;
} }
else { else {
std::cout << "copy construction and copy assignment are OK" std::cout << "copy construction and copy assignment FAILED"
<< std::endl; << std::endl;
} }
return 0; // makes Visual-C++ compiler happy
} }

View File

@ -53,12 +53,14 @@ int&nbsp;main()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;a;<BR> &nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;a;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(a==b&nbsp;&&&nbsp;a==c)&nbsp;{<BR> &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(a==b&nbsp;&&&nbsp;a==c)&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;"copy&nbsp;construction&nbsp;and&nbsp;copy&nbsp;assignment&nbsp;are&nbsp;OK"<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;"copy&nbsp;construction&nbsp;and&nbsp;copy&nbsp;assignment&nbsp;are&nbsp;OK"<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;std::endl;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;std::endl;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;}<BR> &nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<BR> &nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;"copy&nbsp;construction&nbsp;and&nbsp;copy&nbsp;assignment&nbsp;are&nbsp;OK"<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;"copy&nbsp;construction&nbsp;and&nbsp;copy&nbsp;assignment&nbsp;FAILED"<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;std::endl;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;std::endl;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;}<BR> &nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;makes&nbsp;Visual-C++&nbsp;compiler&nbsp;happy</FONT></I><BR>
}<BR> }<BR>
<BR> <BR>
</SPAN> </SPAN>

View File

@ -12,22 +12,24 @@ int main()
// create and initialize array // create and initialize array
array<int,10> a = { { 1, 2, 3, 4, 5 } }; array<int,10> a = { { 1, 2, 3, 4, 5 } };
PRINT_ELEMENTS(a); print_elements(a);
// modify elements directly // modify elements directly
for (unsigned i=0; i<a.size(); ++i) { for (unsigned i=0; i<a.size(); ++i) {
++a[i]; ++a[i];
} }
PRINT_ELEMENTS(a); print_elements(a);
// change order using an STL algorithm // change order using an STL algorithm
reverse(a.begin(),a.end()); reverse(a.begin(),a.end());
PRINT_ELEMENTS(a); print_elements(a);
// negate elements using STL framework // negate elements using STL framework
transform(a.begin(),a.end(), // source transform(a.begin(),a.end(), // source
a.begin(), // destination a.begin(), // destination
negate<int>()); // operation negate<int>()); // operation
PRINT_ELEMENTS(a); print_elements(a);
return 0; // makes Visual-C++ compiler happy
} }

View File

@ -29,23 +29,25 @@ int&nbsp;main()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;create&nbsp;and&nbsp;initialize&nbsp;array</FONT></I><BR> &nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;create&nbsp;and&nbsp;initialize&nbsp;array</FONT></I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;array&lt;int,10&gt;&nbsp;a&nbsp;=&nbsp;{&nbsp;{&nbsp;1,&nbsp;2,&nbsp;3,&nbsp;4,&nbsp;5&nbsp;}&nbsp;};<BR> &nbsp;&nbsp;&nbsp;&nbsp;array&lt;int,10&gt;&nbsp;a&nbsp;=&nbsp;{&nbsp;{&nbsp;1,&nbsp;2,&nbsp;3,&nbsp;4,&nbsp;5&nbsp;}&nbsp;};<BR>
<BR> <BR>
&nbsp;&nbsp;&nbsp;&nbsp;PRINT_ELEMENTS(a);<BR> &nbsp;&nbsp;&nbsp;&nbsp;print_elements(a);<BR>
<BR> <BR>
&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;modify&nbsp;elements&nbsp;directly</FONT></I><BR> &nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;modify&nbsp;elements&nbsp;directly</FONT></I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(unsigned&nbsp;i=0;&nbsp;i&lt;a.size();&nbsp;++i)&nbsp;{<BR> &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(unsigned&nbsp;i=0;&nbsp;i&lt;a.size();&nbsp;++i)&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++a[i];<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++a[i];<BR>
&nbsp;&nbsp;&nbsp;&nbsp;}<BR> &nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;PRINT_ELEMENTS(a);<BR> &nbsp;&nbsp;&nbsp;&nbsp;print_elements(a);<BR>
<BR> <BR>
&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;change&nbsp;order&nbsp;using&nbsp;an&nbsp;STL&nbsp;algorithm</FONT></I><BR> &nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;change&nbsp;order&nbsp;using&nbsp;an&nbsp;STL&nbsp;algorithm</FONT></I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;reverse(a.begin(),a.end());<BR> &nbsp;&nbsp;&nbsp;&nbsp;reverse(a.begin(),a.end());<BR>
&nbsp;&nbsp;&nbsp;&nbsp;PRINT_ELEMENTS(a);<BR> &nbsp;&nbsp;&nbsp;&nbsp;print_elements(a);<BR>
<BR> <BR>
&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;negate&nbsp;elements&nbsp;using&nbsp;STL&nbsp;framework</FONT></I><BR> &nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;negate&nbsp;elements&nbsp;using&nbsp;STL&nbsp;framework</FONT></I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;transform(a.begin(),a.end(),&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;source</FONT></I><BR> &nbsp;&nbsp;&nbsp;&nbsp;transform(a.begin(),a.end(),&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;source</FONT></I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.begin(),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;destination</FONT></I><BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.begin(),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;destination</FONT></I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;negate&lt;int&gt;());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;operation</FONT></I><BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;negate&lt;int&gt;());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;operation</FONT></I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;PRINT_ELEMENTS(a);<BR> &nbsp;&nbsp;&nbsp;&nbsp;print_elements(a);<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;makes&nbsp;Visual-C++&nbsp;compiler&nbsp;happy</FONT></I><BR>
}<BR> }<BR>
<BR> <BR>
</SPAN> </SPAN>

View File

@ -17,7 +17,7 @@ int main()
// copy and change order // copy and change order
boost::array<std::string,4> seasons_orig = seasons; boost::array<std::string,4> seasons_orig = seasons;
for (unsigned i=seasons.size()-1; i>0; --i) { for (unsigned i=seasons.size()-1; i>0; --i) {
swap(seasons.at(i),seasons.at((i+1)%seasons.size())); std::swap(seasons.at(i),seasons.at((i+1)%seasons.size()));
} }
std::cout << "one way: "; std::cout << "one way: ";
@ -25,7 +25,7 @@ int main()
// try swap() // try swap()
std::cout << "other way: "; std::cout << "other way: ";
swap(seasons,seasons_orig); std::swap(seasons,seasons_orig);
print_elements(seasons); print_elements(seasons);
// try reverse iterators // try reverse iterators
@ -35,6 +35,8 @@ int main()
std::cout << " " << *pos; std::cout << " " << *pos;
} }
std::cout << std::endl; std::cout << std::endl;
return 0; // makes Visual-C++ compiler happy
} }
template <class T> template <class T>

View File

@ -52,6 +52,8 @@ int&nbsp;main()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;"&nbsp;"&nbsp;&lt;&lt;&nbsp;*pos;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;"&nbsp;"&nbsp;&lt;&lt;&nbsp;*pos;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;}<BR> &nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;std::endl;<BR> &nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;std::endl;<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;makes&nbsp;Visual-C++&nbsp;compiler&nbsp;happy</FONT></I><BR>
}<BR> }<BR>
<BR> <BR>
template&nbsp;&lt;class&nbsp;T&gt;<BR> template&nbsp;&lt;class&nbsp;T&gt;<BR>

View File

@ -31,6 +31,8 @@ int main()
// print last element of last array // print last element of last array
std::cout << "last element of last array: " std::cout << "last element of last array: "
<< seasons_i18n[seasons_i18n.size()-1][seasons_i18n[0].size()-1] << seasons_i18n[seasons_i18n.size()-1][seasons_i18n[0].size()-1]
<< std::endl; << std::endl;
return 0; // makes Visual-C++ compiler happy
} }

View File

@ -48,7 +48,9 @@ int&nbsp;main()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;print&nbsp;last&nbsp;element&nbsp;of&nbsp;last&nbsp;array</FONT></I><BR> &nbsp;&nbsp;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;print&nbsp;last&nbsp;element&nbsp;of&nbsp;last&nbsp;array</FONT></I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;"last&nbsp;element&nbsp;of&nbsp;last&nbsp;array:&nbsp;"<BR> &nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;"last&nbsp;element&nbsp;of&nbsp;last&nbsp;array:&nbsp;"<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;seasons_i18n[seasons_i18n.size()-1][seasons_i18n[0].size()-1]<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;seasons_i18n[seasons_i18n.size()-1][seasons_i18n[0].size()-1]<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;std::endl;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;std::endl;<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;makes&nbsp;Visual-C++&nbsp;compiler&nbsp;happy</FONT></I><BR>
}<BR> }<BR>
<BR> <BR>
</SPAN> </SPAN>

View File

@ -27,7 +27,8 @@ int main()
// use some common STL container operations // use some common STL container operations
std::cout << "static_size: " << a.size() << std::endl; std::cout << "static_size: " << a.size() << std::endl;
std::cout << "size: " << a.size() << std::endl; std::cout << "size: " << a.size() << std::endl;
std::cout << "empty: " << std::boolalpha << a.empty() << std::endl; // Can't use std::boolalpha because it isn't portable
std::cout << "empty: " << (a.empty()? "true" : "false") << std::endl;
std::cout << "max_size: " << a.max_size() << std::endl; std::cout << "max_size: " << a.max_size() << std::endl;
std::cout << "front: " << a.front() << std::endl; std::cout << "front: " << a.front() << std::endl;
std::cout << "back: " << a.back() << std::endl; std::cout << "back: " << a.back() << std::endl;
@ -47,18 +48,20 @@ int main()
c = a; c = a;
if (a==b && a==c) { if (a==b && a==c) {
std::cout << "copy construction and copy assignment are OK" std::cout << "copy construction and copy assignment are OK"
<< std::endl; << std::endl;
} }
else { else {
std::cout << "copy construction and copy assignment are OK" std::cout << "copy construction and copy assignment are BROKEN"
<< std::endl; << std::endl;
} }
typedef boost::array<double,6> DArray; typedef boost::array<double,6> DArray;
typedef boost::array<int,6> IArray; typedef boost::array<int,6> IArray;
IArray ia = { 1, 2, 3, 4, 5, 6 }; IArray ia = { { 1, 2, 3, 4, 5, 6 } } ; // extra braces silence GCC warning
DArray da; DArray da;
da = ia; da = ia;
da.assign(42); da.assign(42);
return 0; // makes Visual-C++ compiler happy
} }

View File

@ -64,11 +64,11 @@ int&nbsp;main()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;a;<BR> &nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;a;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(a==b&nbsp;&&&nbsp;a==c)&nbsp;{<BR> &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(a==b&nbsp;&&&nbsp;a==c)&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;"copy&nbsp;construction&nbsp;and&nbsp;copy&nbsp;assignment&nbsp;are&nbsp;OK"<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;"copy&nbsp;construction&nbsp;and&nbsp;copy&nbsp;assignment&nbsp;are&nbsp;OK"<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;std::endl;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;std::endl;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;}<BR> &nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<BR> &nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;"copy&nbsp;construction&nbsp;and&nbsp;copy&nbsp;assignment&nbsp;are&nbsp;OK"<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;"copy&nbsp;construction&nbsp;and&nbsp;copy&nbsp;assignment&nbsp;are&nbsp;BROKEN"<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;std::endl;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt;&nbsp;std::endl;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;}<BR> &nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR> <BR>
&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;boost::array&lt;double,6&gt;&nbsp;DArray;<BR> &nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;boost::array&lt;double,6&gt;&nbsp;DArray;<BR>
@ -77,6 +77,8 @@ int&nbsp;main()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;DArray&nbsp;da;<BR> &nbsp;&nbsp;&nbsp;&nbsp;DArray&nbsp;da;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;da&nbsp;=&nbsp;ia;<BR> &nbsp;&nbsp;&nbsp;&nbsp;da&nbsp;=&nbsp;ia;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;da.assign(42);<BR> &nbsp;&nbsp;&nbsp;&nbsp;da.assign(42);<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >//&nbsp;makes&nbsp;Visual-C++&nbsp;compiler&nbsp;happy</FONT></I><BR>
}<BR> }<BR>
<BR> <BR>
</SPAN> </SPAN>

View File

@ -5,13 +5,15 @@
* http://www.josuttis.com/cppcode * http://www.josuttis.com/cppcode
* for details and the latest version. * for details and the latest version.
* *
* (C) Copyright Nicolai M. Josuttis 1999. * (C) Copyright Nicolai M. Josuttis 2001.
* Permission to copy, use, modify, sell and distribute this software * Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies. * is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied * This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose. * warranty, and with no claim as to its suitability for any purpose.
* *
* Jul 31, 2000 * 05 Aug 2001 - minor update (Nico Josuttis)
* 20 Jan 2001 - STLport fix (Beman Dawes)
* 29 Sep 2000 - Initial Revision (Nico Josuttis)
*/ */
#ifndef BOOST_ARRAY_HPP #ifndef BOOST_ARRAY_HPP
#define BOOST_ARRAY_HPP #define BOOST_ARRAY_HPP
@ -21,9 +23,7 @@
#include <iterator> #include <iterator>
#include <algorithm> #include <algorithm>
// BUG-FIX for compilers that don't support // FIXES for broken compilers
// std::size_t and std::ptrdiff_t yet
// (such as gcc)
#include <boost/config.hpp> #include <boost/config.hpp>
namespace boost { namespace boost {
@ -50,14 +50,20 @@ namespace boost {
const_iterator end() const { return elems+N; } const_iterator end() const { return elems+N; }
// reverse iterator support // reverse iterator support
# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR)
typedef std::reverse_iterator<iterator> reverse_iterator; typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator; typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
# else #elif defined(BOOST_MSVC) && (BOOST_MSVC == 1300)
// workaround for broken reverse_iterator implementations due to no partial specialization // workaround for broken reverse_iterator in VC7
typedef std::reverse_iterator<std::_Ptrit<value_type, difference_type, iterator,
reference, iterator, reference> > reverse_iterator;
typedef std::reverse_iterator<std::_Ptrit<value_type, difference_type, const_iterator,
const_reference, iterator, reference> > const_reverse_iterator;
#else
// workaround for broken reverse_iterator implementations
typedef std::reverse_iterator<iterator,T> reverse_iterator; typedef std::reverse_iterator<iterator,T> reverse_iterator;
typedef std::reverse_iterator<const_iterator,T> const_reverse_iterator; typedef std::reverse_iterator<const_iterator,T> const_reverse_iterator;
# endif #endif
reverse_iterator rbegin() { return reverse_iterator(end()); } reverse_iterator rbegin() { return reverse_iterator(end()); }
const_reverse_iterator rbegin() const { const_reverse_iterator rbegin() const {
@ -88,7 +94,6 @@ namespace boost {
static size_type max_size() { return N; } static size_type max_size() { return N; }
enum { static_size = N }; enum { static_size = N };
public:
// swap (note: linear complexity) // swap (note: linear complexity)
void swap (array<T,N>& y) { void swap (array<T,N>& y) {
std::swap_ranges(begin(),end(),y.begin()); std::swap_ranges(begin(),end(),y.begin());
@ -110,10 +115,10 @@ namespace boost {
std::fill_n(begin(),size(),value); std::fill_n(begin(),size(),value);
} }
# ifndef BOOST_NO_PRIVATE_IN_AGGREGATE #ifndef BOOST_NO_PRIVATE_IN_AGGREGATE
private: private:
# endif #endif
// private member functions are allowed in aggregates [ISO 8.5.1] // check range (may be private because it is static)
static void rangecheck (size_type i) { static void rangecheck (size_type i) {
if (i >= size()) { throw std::range_error("array"); } if (i >= size()) { throw std::range_error("array"); }
} }
@ -155,3 +160,4 @@ namespace boost {
} /* namespace boost */ } /* namespace boost */
#endif /*BOOST_ARRAY_HPP*/ #endif /*BOOST_ARRAY_HPP*/

View File

@ -13,8 +13,8 @@
<tr> <tr>
<td bgcolor="#FFFFFF"><img src="../../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> <td bgcolor="#FFFFFF"><img src="../../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
<td><a href="../../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> <td><a href="../../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
<td><a href="../../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
<td><a href="../../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> <td><a href="../../people/people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
<td><a href="../../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> <td><a href="../../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
<td><a href="../../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> <td><a href="../../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
</tr> </tr>
@ -26,10 +26,9 @@ of constant size.
<li><a href="array.html">Documentation</a> (HTML).</li> <li><a href="array.html">Documentation</a> (HTML).</li>
<li>Header <a href="../../boost/array.hpp">array.hpp</a></li> <li>Header <a href="../../boost/array.hpp">array.hpp</a></li>
<li>See docs for links to example programs.</li> <li>See docs for links to example programs.</li>
<li>Download <a href="../../boost_all.zip">all of Boost</a> (ZIP format).</li>
<li>Submitted by <a href="http://www.josuttis.com">Nicolai M. Josuttis</a>.</li> <li>Submitted by <a href="http://www.josuttis.com">Nicolai M. Josuttis</a>.</li>
</ul> </ul>
<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan -->27 Sep 2000<!--webbot bot="Timestamp" endspan i-checksum="14936" --></p> <p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan -->14 Mar 2001<!--webbot bot="Timestamp" endspan i-checksum="14885" --></p>
</body> </body>

View File

@ -10,13 +10,13 @@
*/ */
#include <iostream> #include <iostream>
/* PRINT_ELEMENTS() /* print_elements()
* - prints optional C-string optcstr followed by * - prints optional C-string optcstr followed by
* - all elements of the collection coll * - all elements of the collection coll
* - separated by spaces * - separated by spaces
*/ */
template <class T> template <class T>
inline void PRINT_ELEMENTS (const T& coll, const char* optcstr="") inline void print_elements (const T& coll, const char* optcstr="")
{ {
typename T::const_iterator pos; typename T::const_iterator pos;

View File

@ -26,13 +26,13 @@
<SPAN class="Source"> <SPAN class="Source">
#include&nbsp;&lt;iostream&gt;<BR> #include&nbsp;&lt;iostream&gt;<BR>
<BR> <BR>
<Font color="0000FF" >/</FONT><I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;PRINT_ELEMENTS()</FONT></I><BR> <Font color="0000FF" >/</FONT><I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;print_elements()</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;-&nbsp;prints&nbsp;optional&nbsp;C-string&nbsp;optcstr&nbsp;followed&nbsp;by</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;-&nbsp;prints&nbsp;optional&nbsp;C-string&nbsp;optcstr&nbsp;followed&nbsp;by</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;-&nbsp;all&nbsp;elements&nbsp;of&nbsp;the&nbsp;collection&nbsp;coll</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;-&nbsp;all&nbsp;elements&nbsp;of&nbsp;the&nbsp;collection&nbsp;coll</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;-&nbsp;separated&nbsp;by&nbsp;spaces</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*&nbsp;-&nbsp;separated&nbsp;by&nbsp;spaces</FONT></I><BR>
&nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*/</FONT></I><BR> &nbsp;<I><FONT face="Arial,Helvetica,sans-serif" color="0000FF" >*/</FONT></I><BR>
template&nbsp;&lt;class&nbsp;T&gt;<BR> template&nbsp;&lt;class&nbsp;T&gt;<BR>
inline&nbsp;void&nbsp;PRINT_ELEMENTS&nbsp;(const&nbsp;T&&nbsp;coll,&nbsp;const&nbsp;char*&nbsp;optcstr="")<BR> inline&nbsp;void&nbsp;print_elements&nbsp;(const&nbsp;T&&nbsp;coll,&nbsp;const&nbsp;char*&nbsp;optcstr="")<BR>
{<BR> {<BR>
&nbsp;&nbsp;&nbsp;&nbsp;typename&nbsp;T::const_iterator&nbsp;pos;<BR> &nbsp;&nbsp;&nbsp;&nbsp;typename&nbsp;T::const_iterator&nbsp;pos;<BR>
<BR> <BR>