现在的位置: 首页 > 综合 > 正文

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

2019年03月09日 ⁄ 综合 ⁄ 共 2727字 ⁄ 字号 评论关闭


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同上

抱歉!评论已关闭.