第一范文网 - 专业文章范例文档资料分享平台

C++ boost库总结

来源:用户分享 时间:2025/6/1 4:58:37 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

3. typeof库使用宏模拟了C++0X中的typedef和auto关键字,可以减轻书写繁琐

的变量类型声明工作,简化代码。对于用户自定义类型需要手工用宏注册。(语法并没那么好看,不准备使用)

4. optional使用“容器”语义,包装了“可能产生无效值”的对象,实现了“未初始

化”的概念(Nullable

5. optional make_optional(bool condition, T const& v)用来简单构建

optional对象,但不能处理optional的情况。(此乃鸡肋)

6. optional str(in_place(\就地创建\,而不需拷贝临时对象,避免

大对象的拷贝开销

7. 用于初始化的assign库(仅限于STL标准容器,通过重载“+=”和“,”运算符实现):

#include using namespace boost;

vector v; v += 1,2,3,4,5,6*6; set s; s += \

map m; m += make_pair(1, \

8. assign还支持insert()、push_front()、push_back()(通过重载“()”实现):

vector v; push_back(v)(1)(2)(3)(4)(5); list l; push_front(l)(\set s; insert(s)(3.14)(0.618)(1.732); map m; insert(m)(1, \

9. assign也可以将“()”和“,”混用:

vector v;

push_back(v), 1, 2, 3, 4, 5;

push_back(v)(6), 7, 64 / 8, (9), 10; deque d;

push_front(d)() = \

10. assign list_of()函数:

vector v = list_of(1)(2)(3);

deque d = (list_of(\set s = (list_of(10), 20, 30, 40);

map m = list_of(make_pair(1, \如果需要将括号与逗号混合使用,则要求最外侧加一个括号,否则编译器无法推导

11. assign map_list_of/pair_list_of函数:

map m1 = map_list_of(1, 2)(3, 4)(5, 6) map m2 = map_list_of(1, \

12. assign tuple_list_of用户初始化元素类型为tuple的容器

13. assign repeat()可以重复生成值,repeat_fun()可以重复无参函数或仿函数,

range()则可以从序列中取出部分或全部:

vector v = list_of(1).repeat(3, 2)(3)(4)(5); // v = 1,2,2,2,3,4,5 multiset ms; insert(ms).repeat_fun(5, &ran).repeat(2, 1), 10; // ms = x,x,x,x,x,1,1,10

deque d; push_front(d).range(v.begin(), v.begin() + 5); // d=3,2,2,2,1

14. assign支持8个STL标准容器(vector、string、deque、list、set、multiset、

map、multimap),对容器适配器(stack、queue、priority_queue)则需要通过to_adapter():

stack stk = (list_of(1), 2, 3).to_adapter();

queue q = (list_of(\priority_queue pq = (list_of(1.414), 1.732).to_adapter();

15. assign也支持部分不在STL中的非标准容器slist、hash_map、hash_set,因为

其符合标准容器定义,同时也支持大部分boost容器:array、circular_buffer、unordered等

16. assign list_of()嵌套:

vector> v = list_of(list_of(1)(2)) list_of(list_of(3)(4)); v += list_of(5)(6), list_of(7)(8);

17. assign ref_list_of()、cref_list_of()、ptr_push_back()、ptr_list_of()还支持以引

用或指针来构造初始化: int a = 1, b = 2, c = 3;

vector v = ref_list_of<3>(a)(b)(c);

18. boost::swap是对std::swap的增强,并且扩充了对数组的支持:

int a1[10]; std::fill_n(a1, 10, 5); int a2[10]; std::file_n(a2, 10, 20); boost::swap(a1, a2);

19. 单件boost::details::pool::singleton_default在main之前进行构造,支持继

承或非继承形式(最恨main之前的事情了)

20. 单件boost::serialization::singleton在main之前进行构造,支持继承或非继

承形式。继承方式更彻底一些,非继承方式不影响原有代码

21. boost::tribool三态bool,indeterminate(tribool)可判断一个三态bool是否处

于不确定状态

22. 选择optional还是tribool:如果返回值可能是无效的,那么就是

optional,如果返回值总是确定的,但可能无法确定其意义,那么就用tribool(最多自己随手定义个enum状态,为了这点需求需要记住这一堆名称和细节!)

23. using namespace std::rel_ops; 则一旦为类定义了operator==和<,则自动具

有!=、>、<=和>=的功能。boost operators库提供了对该功能的增强,使用时只需继承自这些类并提供指定的operator重载即可获得附送的重载:

1. equality_comparable:要求提供==,可自动实现!=,相等语义 2. less_than_comparable:要求提供<,可自动实现>、<=、>= 3. addable:要求提供+=,可自动实现+ 4. subtractable:要求提供-=,可自动实现-

5. incrementable:要求提供前置++,可自动实现后置++ 6. decrementable:要求提供前置--,可自动实现后置-- 7. equivalent:要求提供<,可自动实现==,等价语义 8. totally_ordered:全序概念,组合了equality_comparable和

less_than_comparable

9. additive:可加减概念,组合了addable和subtractable 10. multiplicative:可乘除概念,组合了multipliable和diviable 11. arithmetic:算术运算概念,组合了additive和multiplicative 12. unit_stoppable:可步进概念,组合了incrementable和decrementable 13. public dereferenceable:解引用操作符,要求提供

operator*,可自动实现operator->。P为operator->返回类型,一般为T*

搜索更多关于: C++ boost库总结 的文档
C++ boost库总结.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c3c4u394qk59jajr88ky455t2h95x5500w97_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top