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

本文实例讲述了c++里支持静态数组的容器: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]),但以下这些除外:

① 提供了 front() 和 back()。
② 提供了 operator[] 和 at()。

2. 头文件和相关成员函数声明:
Reference
Header <boost/array.hpp>
Class template array(类模板 array)
array 公有的 构造/拷贝/析构

template<typename U> array& operator=(const array<U, N>& other);

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;
 }

希望本文所述对大家的C++程序设计有所帮助。

(0)

相关推荐

  • 使用boost读取XML文件详细介绍

    boost读取XML文件 boost中提供了对配置文件读取的支持,它就是:property_tree. basic_ptree 是property_tree的核心基础.其接口像std::list.可以执行很多基本的元素操作,比如使用begin().end()等.     此外还加入了操作属性树的get().get_child().get_value().data()等额外的操作. basic_ptree有两个重要的内部定义self_type和value_type.self_type是basic_

  • C++ boost::asio编程-同步TCP详解及实例代码

    boost::asio编程-同步TCP boost.asio库是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型. boost.asio库支持TCP.UDP.ICMP通信协议. 下面介绍同步TCP模式: 大家好!我是同步方式! 我的主要特点就是执着!所有的操作都要完成或出错才会返回,不过偶的执着被大家称之为阻塞,实在是郁闷~~(场下一片嘘声),其实这样 也是有好处的,比如逻辑清晰,编程比较容易. 在服务器端,我会做个socket交给acceptor对象,让它

  • C++之boost::array的用法

    本文实例讲述了C++之boost::array的用法,分享给大家供大家参考.具体如下: 复制代码 代码如下: #include <string>  #include <iostream>  #include <boost/array.hpp>  #include <algorithm>  using namespace std;  int main()  {      boost::array<int, 5> array_temp = {{12,

  • 使用设计模式中的单例模式来实现C++的boost库

    线程安全的单例模式 一.懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例. 需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety. 使用double-check来保证thread safety.但是如果处理大量数据时,该锁才成为严重的性能瓶颈. 1.静态成员实例的懒汉模式: class Singleton { private: static Singleton* m_instance; Sing

  • VS2013安装配置和使用Boost库教程

    一.前言 好好研究下大名鼎鼎的Boost库. 二.Boost安装 2.1Boost官网下载Boost最新版Version 1.55.0 2.2将下载压缩包解压到本地 解压后可看到目录下有个bootstrap.bat文件. 2.3打开cmd命令窗体,执行bootstra.bat文件 运行下面命令,详细依据自己的环境略有变化. 最基本的目的是我们要执行bootstrap.bat文件 运行完后,结果例如以下: 然后在目录下我们会发现新生成了一个名为bjam.exe的文件 2.4在cmd窗体中执行bja

  • visual studio 2015下boost库配置教程

    因为我也是第一尝试配置,所以有很多不懂得地方,上网找的教程又很多都是老版本的VS,比如VS2010 VS2012又或者Boost1.54之类的. **我根据自己的配置情况给大家一个建议.** 仅给有需要的人以参考用,如有不合适的地方,敬请纠正 首先,我们需要下载一个Boost库. 这个直接去他的官网下就可以了:boost下载地址 下载好后解压到一个目录里.比如我解压到D盘根目录 然后我们打开[开始菜单]->[找到你对应版本的vs命令窗口,比如我是vs2015的]P.s:一定要对应自己的VS版本

  • C++ boost::asio编程-域名解析详细介绍

    C++ boost::asio编程-域名解析 在网络通信中通常我们并不直接使用IP地址,而是使用域名.这时候我们就需要用reslover类来通过域名获取IP,它可以实现 与IP版本无关的网址解析. #include "stdafx.h" #include "boost/asio.hpp" #include "boost/shared_ptr.hpp" #include "boost/thread.hpp" #include &

  • C++中Boost库裁剪与其应用详解

    前言 Boost 库涵盖的范围极广,有字符串和文本处理相关子库比如 format 库和 regexp 库,有容器相关子库比如 variant 库(和 Qt 的 QVariant 有得一拼),有迭代器子库比如 tokenizer 库(可以把字符进行 tokenize),还有算法.函数对象和高阶编程相关子库如functional 库.lambda 库和 signal 库,还有泛型编程.模板编程子库如 call traits.mpl,还有并发编程相关的 thread 库,等等等等. Boost 是如此

  • 浅析Boost智能指针:scoped_ptr shared_ptr weak_ptr

    一. scoped_ptrboost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放.下列代码演示了该指针的基本应用: 复制代码 代码如下: #include <string>#include <iostream>#include <boost/scoped_ptr.hpp> class implementation{public:    ~implementation() { std::cout

  • C++之BOOST字符串查找示例

    本文实例讲述了C++中BOOST字符串查找的方法,分享给大家供大家参考.具体方法如下: BOOST  字符串查找示例 复制代码 代码如下: #include <string>  #include <iostream>  #include <algorithm>  #include <functional>  #include <boost/algorithm/string/case_conv.hpp>  #include <boost/al

随机推荐