boost一些常用库(数据结构,迭代器,算法及字符串) 简单介绍_boost常用(2)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Any(Not C++11)

通过type erasure技术实现的可以存放任意类型的类型。类型boost::any的变量可以通过boost::any_cast来转化成相应类型,如果类型与之前不匹配会抛出boost::bad_any_cast异常。boost::any大量使用内存动态分配,RTTI和虚函数,对性能可能会有影响。

Variant(Not C++11)

C++03 unions只能放POD,C++11可以放类似于std::string的对象,但需要自己管理构建和销毁,因此需要显示记录union里放的是什么,这样用起来就很累。为了克服这个缺点,boost::variant它维护了数组,编译期决定该数组长度。在赋值或是构造时,这些对象被in-place方式销毁,然后通过placement new创建。同样是基于type erasure技术,它不需要RTTI,效率上比Any快。配合boost::apply_visitor()可以实现visitor模式。

Array(C++ 11)

元素为同样类型的数组的模板类,包含个数信息。与vector等容器相比,它的元素个数动态不能变。它拥有和STL容器类似的成员函数。提供这些优点的同时,性能又和C数组相当。

Tuple(C++11)

与std::pair类似,只是它可以表示多元组。与array不同的是其中的元素类型可以不同。用make_tuple()创建。用boost::tie()可以创建元组的nonconst reference,这样可以作为lvalue用于赋值等。tuple主要是为了简化template programming。如果一个结构体只用一两次,就不用定义成struct了。

Unordered(C++11)

提供了unordered_map, unordered_set等基于hash表的容器实现,对于要经常查找的场合比较适用。

Bitmap(Not C++11)

不是位图库,是用于value同时也是key的容器。大部分的用于索引的容器都是<key, value>的结构,但有时希望元素中的两个值互为索引。当然你可以选择用两个容器替代它,但一般来说会用更多内存。

MultiIndex(Not C++11)

用于可以有多个index的容器,类似于数据库中的表。可以指定每个index的属性,比如unique,sorted等。

Container(Not C++11)

提供一些五花八门的容器,比如stable_vector, slist(C++11有类似的forward_list), static_vector, small_vector, flat_[multi]map/set(基于vector实现的set和map)等。

ICL(Not C++11)

提供了两种基于interval的容器:interval_set和interval_map。它们可以方便地存放interval元素并对其进行相应操作。

Circular Buffer(Not C++11)

通用的循环缓冲实现。有空间优化版本(Lazily分配内存)。

Dynamic Bitset(C++11)

用于表示一系列的bit位。重载operator[]使之可以方便地访问其中某一bit,另外还有如&, |, <<等各种bitwise operator提供。C++11中的std::bitset和它很类似。

Intrusive(Not C++11)

Intrusive的数据结构在c中被大量使用。而相较而言,C++中,比如STL中的容器大多不是intrusive的,即其中的元素不用包含用于容器管理的数据。该库提供了基于intrusive的如list, set, splaytree, treap, rbtree, hashtable, avltree等数据结构。

MultiArray(Not C++11)

用于多维数组,即矩阵的存储和处理。比C++中类似std::array<std::array<int, n>, m>或std::vector<std::vector<>>的方式更方便高效。

Property Map(Not C++11)

最初来源于Boost Graph Library中,需要property map接口来访问图中顶点和边的相关数据。后来发展成通用库用于描述模板参数需求的工具。本质上它是基于下层数据结构(如std::map)的用于映射key object到value object的一系列concept。

Property Tree(Not C++11)

提供了树型的数据存储结构,其中的元素可以通过path来查找,有点像trie树。尤其适合configuration数据的处理。还可以方便得从XML, JSON文件中解析和生成树型结构。

Heap(Not C++11)

priority queue的实现。与STL中的std::priority_queue相比,它提供了更多功能及更多特性(如可遍历,可合并,可比较,可变,稳定等 )。

PointerContainer(Not C++11)

包含了ptr_array, ptr_vector, ptr_set, ptr_multimap等,用于将堆分配的对象指针放在容器内。用它可以免除自己定义compare函数,也可以少加reference操作,使代码更简洁。

Range(Not C++11)

提供了用两个iterator表示数据结构子部分的方法。比如表示子字符串,这样可以有效避免拷贝。同时提供了比如copy, merge, remove, rotate, reverse, replace, transform等通用算法。

算法

Geometry(Not C++11)

该库主要用于解决几何问题。算法涉及segment, multi_point, centroid, convex hull, bounding box等,提供了R-Tree等数据结构的实现。在游戏开发,图形学,机器人等众多领域都能用到。

Algorithm(Partially C++11)

提供了all_of, any_of, partition_copy,KMP,min-max等基本通用算法。其中很多已是C++11标准。

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值