Boost 库 容器、数据结构与算法


varray简介:被包装的固定长度的数组,但是却拥有向STL容器一样的接口,速度、性能与原始数组相差无几。
varray类摘要

template<typename T,std::size_tN> //模板参数而非构造函数

classarray {

 public:

staticconst size_type static_size =N;

iteratorbegin();//rbegin()

iteratorend();//rend() 迭代器支持

referenceoperator[](size_type);//访问某个元素值,不抛

referenceat(size_type);//i<N否则抛出异常

referencefront();//N>0时返回第一个元素

referenceback();//返回最后一个元素




// capacity


size_type  size();//返回N


bool empty();//返回N==0


size_type max_size();//返回N


const T*data() const;//C数组形式返回内部数组指针static


T* c_array();//data()同,只是动态的


voidswap(array<T,N>&); //交换


voidassign(constT&);//将所有元素赋值为value


 // public data members


 T elems[N];


};


…..此外还array重载了>< ==、!等比较操作符



varray小结


v可以把array看做普通数组,只是多了一些STL风格的成员函数,可以更方便的搭配STL算法。应用于已知数组大小、运行速度要求高的场合


v缺陷


v无构造函数,不能指定大小和初始值(只能用模板参数指定大小)


vpush_back/front(),不能动态增长


v不能搭配迭代器适配器功能,因为不能动态增长



vDynamic_bitset简介:提供丰富的位运算(vector<bool>),同时又是动态可变的(bitset无)


  注意: dynamic_bitset 的大小是在运行期其对象的构造过程中指定的,并且动态可变。


vdynamic_bitset类摘要


classdynamic_bitset {


 public:


    explicit dynamic_bitset();//构造
dynamic_bitset(const dynamic_bitset&b);//拷贝构造


//thisbitset 的内容与bitset b 的内容被互相交换。
void
swap(dynamic_bitset&b);

//this二进制位数目变为num_bits。如果num_bits> size(),那么区间[0,size()]中保持不变,[size(),num_bits] 中全部为value。如果num_bits< size(),[0,num_bits)中保持不变(而剩余的二进制位被抛弃)。
voidresize(size_type num_bits, boolvalue = false);


voidclear();//情空,大小为0
void
push_back(boolbit);//大小增加1,动态


voidappend(Blockblock);//value中附加到bitset 最后


bool operator[](size_type pos) const;//操作符重载


dynamic_bitset&operator&=(const dynamic_bitset&b);
dynamic_bitset&operator|=(const dynamic_bitset
&b);
还有^=~>>,<<


dynamic_bitset&set();  //bit翻转,置位


dynamic_bitset&reset();


dynamic_bitset&flip();


bool test(size_type n)const;//测试n位是否被设置


bool any() const;//有任何二进制位被设置true


bool none() const;//没有二进制位被设置,则为true


//return*this的一个拷贝,并翻转它的所有二进制位


dynamic_bitset operator~() const;



size_typecount() const;//被设置的二进制位的数目


unsignedlong to_ulong() const;// 二进制位相应的数字值


size_typesize() const;//


size_type num_blocks() const;//this blocks数目。


//*this同类型的一个dynamic_bitset 对象的最大


size_type max_size() const;


bool empty() const;//this->size() == 0,则为true


//如果 thisbitset bitset a 的一个子集,则为true


bool is_subset_of(const dynamic_bitset&a) const;


bool is_proper_subset_of(const dynamic_bitset&a) const;


size_type find_first() const;//被设置的二进制位的最小的索引


//pos 大的被设置的二进制位的最小的索引


size_type find_next(size_type pos) const;


};



vDynamic_bitset小结


vvector<bool>可以动态增长,但不能方便地进行位运算;bitset则正好相反,可以方便地对容纳的二进制位做位运算,但不能动态增长。
dynamic_bitset的出现恰好填补了这两者之间的空白,它类似标准库的bitset,提供丰富的位运算,同时长度又是动态可变的


vunordered简介:包含无序集合和无序映射,其接口,用法同stl的关联容器set/map相同,只是内部使用散列表代替二叉树实现,降低查找复杂度。


vunordered_set类摘要


  自己看……


vstd::set相比,unordered_set增加了一个计算散列值的模板类型参数,通常是boost::hash;另外比较谓词参数是使用std::equal_to<>,而不是set中的less<>,这是因为散列容器不需要保持有序,所以也没有rbegin(),rend(),也不能使用已序区间的算法,例如binary_search,lower_bound,upper_bound.


vunordered_multiset用法与unordered_set类似,只不过它可以容纳重复的元素。


vunordered_map/multi_map同上


你可能感兴趣的:(Boost 库 容器、数据结构与算法)