C++之Boost::array用法简介
本文实例讲述了c++里支持静态数组的容器:boost.array。分享给大家供大家参考。具体分析如下:
很多C++程序员都认为boost.array很有可能出现在下一代标准库里。对于boost.array的用法有一个基本的了解是很有必要的。
1.为什么我们需要固定大小的数组的容器
首先,固定大小的数组还是很常见的,虽然stl提供了vector,但是vector作为动态可增长的数组,比静态数组多了一点开销,这在一些人看来是无法忍受的。c++里也需要提供固定大小容量的数组容器,当然,性能可以和普通数组想媲美。
boost.array应此需求而生。
boost.array实现了大部分但不是全部的“可逆容器(reversablecontainer)”的需求。array不是一个STL可逆容器的原因在于:
①没有提供构造函数。
②元素可能有一个不确定的初始值。
③swap()不具有常量复杂度。
④size()基于第二个模板参数的类型,总是恒定的。
⑤容器不提供分配器支持。
它没有实现“序列”的需求(具体可参见C++标准的23.1.1,[lib.sequence.reqmts]),但以下这些除外:
①提供了front()和back()。
②提供了operator[]和at()。
2.头文件和相关成员函数声明:
Reference
Header<boost/array.hpp>
Classtemplatearray(类模板array)
array公有的构造/拷贝/析构
template<typenameU>array&operator=(constarray<U,N>&other);
array迭代器支持:
1.iteratorbegin();
const_iteratorbegin()const;
返回: 抛出:
位于第一个元素的迭代器
不抛出异常
2.iteratorend(); 返回: 抛出:
const_iteratorend()const;
位于最后一个元素之后位置的迭代器
不抛出异常
array反向迭代器支持:
1.reverse_iteratorrbegin(); 返回:
const_reverse_iteratorrbegin()const;
位于反向迭代的第一个元素的反向迭代器
2.reverse_iteratorrend(); 返回:
const_reverse_iteratorrend()const;
位于反向迭代的最后一个元素之后位置的反向迭代器
array容量:
1.size_typesize(); 返回:
2.boolempty();
返回: 抛出:
不抛出异常
3.size_typemax_size(); 返回: 抛出:
不抛出异常
array元素访问:
1.referenceoperator[](size_typei); Requires: 返回: 抛出:
const_referenceoperator[](size_typei)const;
索引为
不抛出异常。
2.referenceat(size_typei); 返回: 抛出:
const_referenceat(size_typei)const;
索引为
3.referencefront(); 要求: 返回: 抛出:
const_referencefront()const;
第一个元素
不抛出异常
4.referenceback(); 要求: 返回: 抛出:
const_referenceback()const;
最后一个元素
不抛出异常
5.constT*data()const; 返回: 抛出:
不抛出异常
6.T*c_array(); 返回: 抛出:
不抛出异常
array修改器:
1.voidswap(array<T,N>&other); 效果: 复杂度:
基于
2.voidassign(constT&value); 效果:
array特殊算法:
1.template<typenameT,std::size_tN>voidswap(array<T,N>&x,array<T,N>&y); 效果: 抛出:
不抛出异常。
可见boost.array提供了和STL容器的通用接口。因此用起来很简单。值得一提的是,boost并没有提供自定义的构造函数和拷贝构造函数。但是boost.array可以这样初始化:
#include<boost/array.hpp> #include<iostream> usingnamespacestd; usingnamespaceboost; intmain() { array<int,6>a={1,2,3,4,5,6}; //普通数组相一致的访问形式 for(size_ti=0;i<a.size();i++) cout<<a[i]<<""; cout<<endl; //迭代器访问 array<int,6>::iteratoritr=a.begin(); for(;itr!=a.end();++itr) cout<<*itr<<""; cout<<endl; //支持at() cout<<a.at(5)<<endl; return0; }
希望本文所述对大家的C++程序设计有所帮助。