《BOOST程序库完全开发指南》 第07章 容器与数据结构

<boost/array.hpp>:包装内建数组,为其提供标准STL接口,如begin()、front()等,速度性能上与原始数组相差无几。

#include <iostream>
#include <boost/array.hpp>
#include <boost/typeof/typeof.hpp>

int main()
{
    boost::array<int,10> arr;   //一个长度为10的int数组,或 boost::array<int,3> arr = {1,2,3}
    arr[0] = 1;
    arr.back() = 2; //给最后一个元素赋值为2
    arr.assign(100); //给数组所有元素赋值为100
    for(BOOST_AUTO(pos,arr.begin()); pos != arr.end(); ++pos)
    {
        std::cout<<*pos<<",";
    }
    int *p = arr.c_array(); //获取原始数组指针
    *(p+5) = 5;
    std::cout<<"\n"<<arr[5]<<std::endl;
    int *p_onlyread = arr.data();   //获取原始数组常量指针
    *(p_onlyread+5) = 3;
    std::sort(arr.begin(),arr.end());
    for(BOOST_AUTO(pos,arr.begin()); pos != arr.end(); ++pos)
    {
        std::cout<<*pos<<",";
    }
    std::cout<<"\narray's size:"<<arr.size()<<std::endl;
}

C++98标准为处理二进制数值提供了两个工具:vector<bool> 和 bitset。前者可以动态增长,但不能方便的进行位运算;后者则相反。

<boost/dynamic_bitset.hpp> 结合了上术两者的优势,它不是严格意义上的“容器”,不提供迭代器支持。

暂时略过,等需要时和 vector<bool> 和 bitset 放在一起研究。

散列容器(hash container)通常比二叉树的存储方式可以提供更高的访问效率。SGISTL、STLport 等都实现了各自的散列容器,且取名皆为 hash_set、hash_map,为了避免与现有代码的冲突,这里取名为 unordered_xxx 的形式,同时也表明它是无序的。

散列集合 unordered_set/unordered_multiset 与 标准关联容器 set/multiset 用法相同,只是内部使用散列表代替了二叉树实现,查找复杂度由对数降为常数。

散列映射 unordered_map/unordered_multimap 与上相同。

标准库中提供的 map/multi_map 是单向的映射关系,<boost/bimap.hpp> 提供了双向的映射关系,其接口被特意设计为符合STL规范,以减少学习负担。

原文地址:https://www.cnblogs.com/tianyajuanke/p/2737167.html