源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C++之Boost::array用法简介

  • 时间:2021-12-23 05:04 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C++之Boost::array用法简介
本文实例讲述了c++里支持静态数组的容器:boost.array。分享给大家供大家参考。具体分析如下: 很多C++程序员都认为boost.array很有可能出现在下一代标准库里。对于boost.array的用法有一个基本的了解是很有必要的。 [b]1. 为什么我们需要固定大小的数组的容器[/b] 首先,固定大小的数组还是很常见的,虽然stl提供了vector,但是vector作为动态可增长的数组,比静态数组多了一点开销,这在一些人看来是无法忍受的。c++里也需要提供固定大小容量的数组容器,当然,性能可以和普通数组想媲美。 boost.array应此需求而生。 boost.array 实现了大部分但不是全部的“可逆容器(reversable container)”的需求。array 不是一个 STL 可逆容器的原因在于: ① 没有提供构造函数。 ② 元素可能有一个不确定的初始值。 ③ swap() 不具有常量复杂度。 ④ size() 基于第二个模板参数的类型,总是恒定的。 ⑤ 容器不提供分配器支持。 它没有实现“序列”的需求(具体可参见 C++ 标准的 23.1.1, [lib. sequence.reqmts]),但以下这些除外: ① 提供了 front() 和 back()。 ② 提供了 operator[] 和 at()。 [b]2. 头文件和相关成员函数声明: [/b]Reference Header <boost/array.hpp> Class template array(类模板 array) array 公有的 构造/拷贝/析构 template<typename U> array& operator=(const array<U, N>& other); [b]array 迭代器支持:[/b] 1.iterator begin(); const_iterator begin() const;

返回:

位于第一个元素的迭代器
抛出: 不抛出异常

2.iterator end(); const_iterator end() const;

返回:

位于最后一个元素之后位置的迭代器
抛出: 不抛出异常

[b]array 反向迭代器支持:[/b] 1.reverse_iterator rbegin(); const_reverse_iterator rbegin() const;

返回:

位于反向迭代的第一个元素的反向迭代器

2.reverse_iterator rend(); const_reverse_iterator rend() const;

返回:

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

[b]array 容量:[/b] 1.size_type size();

返回:

[code]N[/code]

2.bool empty();

返回:

[code]N==0[/code]
抛出: 不抛出异常

3.size_type max_size();

返回:

[code]N[/code]
抛出: 不抛出异常

[b]array 元素访问:[/b] 1.reference operator[](size_type i); const_reference operator[](size_type i) const;

Requires:

[code]i < N[/code]
返回: 索引为 [code]i[/code] 的元素
抛出: 不抛出异常。

2.reference at(size_type i); const_reference at(size_type i) const;

返回:

索引为 [code]i[/code] 的元素
抛出: [code]std::range_error[/code] if [code]i >= N[/code]

3.reference front(); const_reference front() const;

要求:

[code]N > 0[/code]
返回: 第一个元素
抛出: 不抛出异常

4.reference back(); const_reference back() const;

要求:

[code]N > 0[/code]
返回: 最后一个元素
抛出: 不抛出异常

5.const T* data() const;

返回:

[code]elems[/code]
抛出: 不抛出异常

6.T* c_array();

返回:

[code]elems[/code]
抛出: 不抛出异常

[b]array 修改器:[/b] 1.void swap(array<T, N>& other);

效果:

[code]std::swap_ranges([url=http://blog.csdn.net/bichenggui/article/details/array.html#id2435197-bb]begin[/url](), [url=http://blog.csdn.net/bichenggui/article/details/array.html#id2435231-bb]end[/url](), other.[url=http://blog.csdn.net/bichenggui/article/details/array.html#id2435197-bb]begin[/url]())[/code]
复杂度: 基于 [code]N[/code] 的线性增长

2.void assign(const T& value);

效果:

[code]std::fill_n([url=http://blog.csdn.net/bichenggui/article/details/array.html#id2435197-bb]begin[/url](), N, value)[/code]

[b]array 特殊算法:[/b] 1.template<typename T, std::size_t N> void swap(array<T, N>& x, array<T, N>& y);

效果:

[code]x.[url=http://blog.csdn.net/bichenggui/article/details/array.html#id2439308-bb]swap[/url](y)[/code]
抛出: 不抛出异常。
  可见boost.array提供了和STL容器的通用接口。因此用起来很简单。值得一提的是,boost并没有提供自定义的构造函数和拷贝构造函数。但是boost.array可以这样初始化:

[u]复制代码[/u] 代码如下:
#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;  }
希望本文所述对大家的C++程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部