《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规范,以减少学习负担。