Boost::array 介绍

本文为大家介绍c++里支持静态数组的容器:boost.array.

boost.array很有可能出现在下一代标准库里。

 

1. 为什么我们需要固定大小的数组的容器

    首先,固定大小的数组还是很常见的,虽然stl提供了vector,但是vector作为动态可增长的数组,比静态数组多了一点开销,这在一些人看来是无法忍受的。c++里也需要提供固定大小容量的数组容器,当然,性能可以和普通数组想媲美。

    boost.array应此需求而生。

 

   boost.array 实现了大部分但不是全部的“可逆容器(reversable container)”的需求。array 不是一个 STL 可逆容器的原因在于:

  • 没有提供构造函数。
  • 元素可能有一个不确定的初始值。
  • swap() 不具有常量复杂度。
  • size() 基于第二个模板参数的类型,总是恒定的。
  • 容器不提供分配器支持。

它没有实现“序列”的需求(参见 C++ 标准的 23.1.1, [lib. sequence.reqmts]),但以下这些除外:

2. 头文件和相关成员函数声明:
Reference

Header <boost/array.hpp>

array 公有的 构造/拷贝/析构
  1. template<typename U> array& operator=(const array<U, N>& other);
Class template array(类模板 array)


array 迭代器支持
  1. iterator begin();
    const_iterator begin() const;

    返回:

    位于第一个元素的迭代器

    抛出:

    不抛出异常
  2. iterator end();
    const_iterator end() const;

    返回:

    位于最后一个元素之后位置的迭代器

    抛出:

    不抛出异常

array 反向迭代器支持

  1. reverse_iterator rbegin();
    const_reverse_iterator rbegin() const;

    返回:

    位于反向迭代的第一个元素的反向迭代器
  2. reverse_iterator rend();
    const_reverse_iterator rend() const;

    返回:

    位于反向迭代的最后一个元素之后位置的反向迭代器

array 容量

  1. size_type size();

    返回:

    N
  2. bool empty();

    返回:

    N==0

    抛出:

    不抛出异常
  3. size_type max_size();

    返回:

    N

    抛出:

    不抛出异常

array 元素访问

  1. reference operator[](size_type i);
    const_reference operator[](size_type i) const;

    Requires:

    i < N

    返回:

    索引为 i 的元素

    抛出:

    不抛出异常。
  2. reference at(size_type i);
    const_reference at(size_type i) const;

    返回:

    索引为 i 的元素

    抛出:

    std::range_error if i >= N
  3. reference front();
    const_reference front() const;

    要求:

    N > 0

    返回:

    第一个元素

    抛出:

    不抛出异常
  4. reference back();
    const_reference back() const;

    要求:

    N > 0

    返回:

    最后一个元素

    抛出:

    不抛出异常
  5. const T* data() const;

    返回:

    elems

    抛出:

    不抛出异常
  6. T* c_array();

    返回:

    elems

    抛出:

    不抛出异常
array 修改器
  1. void swap(array<T, N>& other);

    效果:

    std::swap_ranges(begin(), end(), other.begin())

    复杂度:

    基于 N 的线性增长
  2. void assign(const T& value);

    效果:

    std::fill_n(begin(), N, value)
array 特殊算法
  1. template<typename T, std::size_t N> void swap(array<T, N>& x, array<T, N>& y);

    效果:

    x.swap(y)

    抛出:

    不抛出异常。
 
可见boost.array提供了和STL容器的通用接口。因此用起来很简单。值得一提的是,boost并没有提供自定义的构造函数和拷贝构造函数。但是boost.array可以这样初始化:

#include<boost/array.hpp>

 #include<iostream>

 using namespace std;

 using namespace boost;

 int main()

 {

     array<int,6> a = {1,2,3,4,5,6};

     //普通数组相一致的访问形式

     for(size_t i = 0; i < a.size(); i++)

        cout << a[i] << " " ;

     cout << endl;

 

          //迭代器访问

     array<int,6>::iterator itr = a.begin();

     for(;itr != a.end();++itr)

         cout << *itr << " " ;

     cout << endl;

     

     //支持at()

     cout << a.at(5) << endl;

   

     return 0;

 }


 
   我相信,boost.array肯定会是你的一个选择。

   欢迎各位的批评和建议,有问题请联系 bicheng.gui@gmail.com 。 作者放弃本文的一切权利。

参考文献:
 <boost1.38中文文档>
编译器: vs2008

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值