一 Boost::array
在以前,如果我们要处理一组数据,我们可能使用一般数组存储,或者需要许多的对数组的数据的操作的时候,我们使用STL容器存储。但是如果我们的需求是,我们能够提前固定一组数据的大小,或提前知道这组数据的大小,但是我们又想这组数据进行一些操作,比如排序。。。显然对这个情况,上面的使用原始数组或STL容器都有点不太合适,因为原始的数组显得笨重,的我们自己实现一些重复的功能,但是如果是使用STL容器的话,有可能会导致空间和性能的下降。
template
<
class
Ty, size_t N
>
![](http://www.ithao123.com/upimg/allimg/070912/2333291.gif)
class
array
{
public:
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef Ty& reference;
typedef const Ty& const_reference;
typedef Ty *pointer;
typedef const Ty *const_pointer;
typedef T0 iterator;
typedef T1 const_iterator;
typedef Ty value_type;
typedef reverse_iterator<iterator>reverse_iterator;
typedef reverse_iterator<const_iterator>
const_reverse_iterator;
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
void assign(const Ty& val);
void swap(array& right);
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
iterator begin();
const_iterator begin() const;
iterator end();
const_iterator end() const;
reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
reverse_iterator rend();
const_reverse_iterator rend() const;
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
size_type size() const;
size_type max_size() const;
bool empty() const;
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
reference operator[](size_type off);
const_reference operator[](size_type off) const;
reference at(size_type off);
const_reference at(size_type off) const;
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
reference front();
const_reference front() const;
reference back();
const_reference back() const;
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
T *data();
const T *data() const;
}
;
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
template
<
class
Ty, size_t N
>
class
array;
//
FUNCTION TEMPLATES
template
<
class
Ty, size_t N
>
bool
operator
==
(
const
array
<
Ty, N
>&
left,
const
array
<
Ty, N
>&
right);
template
<
class
Ty, size_t N
>
bool
operator
!=
(
const
array
<
Ty, N
>&
left,
const
array
<
Ty, N
>&
right);
template
<
class
Ty, size_t N
>
bool
operator
<
(
const
array
<
Ty, N
>&
left,
const
array
<
Ty, N
>&
right);
template
<
class
Ty, size_t N
>
bool
operator
<=
(
const
array
<
Ty, N
>&
left,
const
array
<
Ty, N
>&
right);
template
<
class
Ty, size_t N
>
bool
operator
>
(
const
array
<
Ty, N
>&
left,
const
array
<
Ty, N
>&
right);
template
<
class
Ty, size_t N
>
bool
operator
>=
(
const
array
<
Ty, N
>&
left,
const
array
<
Ty, N
>&
right);
template
<
class
Ty, size_t N
>
void
swap(
array
<
Ty, N
>&
left,
array
<
Ty, N
>&
right);
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
//
tuple-LIKE INTERFACE
template
<
int
Idx,
class
Ty, size_t N
>
Ty
&
get
(array
<
Ty, N
>&
arr);
template
<
int
Idx,
class
Ty, size_t N
>
const
Ty
&
get
(
const
array
<
Ty, N
>&
arr);
template
<
class
Ty, size_t N
>
class
tuple_element
<
array
<
Ty, N
>
>
;
template
<
class
Ty, size_t N
>
class
tuple_size
<
array
<
Ty, N
>
>
;
#include
<
algorithm
>
#include
<
iostream
>
#include
<
stdexcept
>
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
#include
"
boost/array.hpp
"
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
const
int
ELEMS
=
6
;
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
template
<
class
Container
>
void
do_sort (Container
&
values)
![](http://www.ithao123.com/upimg/allimg/070912/2333291.gif)
{
std::sort (values.begin(), values.end());
}
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
int
main()
![](http://www.ithao123.com/upimg/allimg/070912/2333291.gif)
{
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
boost::array<int, ELEMS> values1 =
{ 3, 1, 4, 2, 9, 8 };
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
boost::array<int, ELEMS> values2 =
{2,2,2};
boost::array<int, ELEMS> values3(values1);
boost::array<int, ELEMS> values4 = values2;
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
boost::array<int, ELEMS>::size_type num = values1.size();
boost::array<int, ELEMS>::size_type maxnum = values1.max_size();
bool isEmpty = values1.empty();
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
// test for get function
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
boost::array<int, 10> squares =
{ 0, 1, 4, 9, 16,25, 36, 49, 64, 81 };
int idx = -1;
for (;;)
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
{
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
try
{
std::cout << idx << " squared is "
<< squares .at(idx) << '/n';
break;
}
catch(std::exception&)
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
{
std::cout << "Value to square: ";
std::cin >> idx;
}
}
int ninesquare = squares[9];
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
// test for iterator
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
boost::array<int, ELEMS> values =
{ 3, 1, 4, 2, 9, 8 };
std::copy(values.begin(), values.end(),
std::ostream_iterator<int>(std::cout, " "));
std::cout << '/n';
std::sort(values.rbegin(), values.rend());
std::copy(values.begin(), values.end(),
std::ostream_iterator<int>(std::cout, " "));
std::cout << '/n';
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
// test assign and swap
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
boost::array<int,5> myarr1 =
{1,2,3,4,5};
boost::array<int,10> myarr2;
myarr2.assign(10);
boost::array<int,12> myarr3;
//myarr3.swap(myarr1); // error
boost::array<int,5> myarr;
myarr.swap(myarr1);
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
int* my1 = myarr1.c_array();
int* my2 = myarr1.data();
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
return 0;
}
在以前,如果我们要处理一组数据,我们可能使用一般数组存储,或者需要许多的对数组的数据的操作的时候,我们使用STL容器存储。但是如果我们的需求是,我们能够提前固定一组数据的大小,或提前知道这组数据的大小,但是我们又想这组数据进行一些操作,比如排序。。。显然对这个情况,上面的使用原始数组或STL容器都有点不太合适,因为原始的数组显得笨重,的我们自己实现一些重复的功能,但是如果是使用STL容器的话,有可能会导致空间和性能的下降。
基于上面的情况,所以在Boost中引入Boost::array,也可能会被加入下一代的C++标准中。Boost::array,内部仍然是固定长度,但是却拥有向STL容器一样的接口,这样就使的Boost::array能够支持STL中的算法,省去了很多的重复的工作,提高开发效率。
二 源码剖析
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333291.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333292.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333293.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/23332946.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
比较简单,只要用过STL容器的,都能明白,最后的几个get,tuple_element,是在tr1中才有的,为了和tuple接口兼容。
三 实例
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333291.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333292.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333293.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/23332946.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333290.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333291.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333292.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333293.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329113.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333293.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329113.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333293.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329113.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333293.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329113.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333293.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329113.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333293.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329140.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329113.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333293.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329140.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329140.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329113.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333293.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329112.gif)
![](http://www.ithao123.com/upimg/allimg/070912/233329113.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333293.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/2333294.gif)
![](http://www.ithao123.com/upimg/allimg/070912/23332946.gif)
四 注意
五 参考
1)Beyond the C++ Standard Library: An Introduction to Boost
2)boost在线document