指针C boost库总结

boost库  时间:2021-01-26  阅读:()

第1章Boost程序库总论

1. 使用Boost将大大增强C++的功能和表现力

第2章时间与日期

1. timer提供毫秒级的计时精度 内部是通过std::c lock取时间的

2. progress_timer自动打印某生命周期的执行时间

3. 原则上程序库的代码是不应该被用户修改的

4. progress_display可以在控制台上显示程序的执行进度

5. date_time库能很好的表示日期时间概念并能和C的时间结构tm进行友好互转

6. date类提供年月日和星期几的概念。data可通过from_string或from_undelim ited_string从字符串解析而来可通过to_s imple_string、 to_is o_string、 to_extended_is o_string转换为字符串。 精度到天的DateTime

7. day_clock是精度到天的时钟

8. date_duration表示的是天精度的时间间隔概念别名为days另外还有years、months、weeks

9. date_period表示两个date之间的日期区间精度到天的TimeSpan

10.date_iterator、w eek_iterator、month_it erator和year_iterator是时间的迭代器

11.boost::greorian: :gregorian_calendar中有实用静态方法 is_leap_year、end_o f_month_day

12. time_durat ion表示微妙或纳秒级的时间概念几个实用子类hours、minutes、s ec onds、millisec/milliseconds、microsec/microseconds、 nanosec/nannoseconds

13.duration_from_string可以从字符串解析time_duration

14.ptime用来表示时间点相当于date和time_duration的组合。可以用time_from_string或from_is o_string解析。 TimeSpanptime now 1=second_clock::local_time(); //得到本地当前秒精度时间ptime now2=microsec_clock::universal_time(); //得到本地当前微秒精度时间

15. time_period表示两个ptime之间的时间区间。 DateTime

16.时间迭代器没有日期迭代器那么多只有time_it erator一个

17. boost时间日期库乱、破碎、过度设计

第3章内存管理

1. sc oped_ptr类似auto_ptr但其一旦获得对象的管理权你就无法再从它那里取回来。该智能指针只希望在本作用域里使用不希望被转让。 aut o_p tr有意设计成所有权的自动转让 sc oped_ptr有意设计成所有权的无法转让。 sc oped_ptr和auto_ptr均不能作为容器元素。

2. scoped_array包装的是new[]产生的指针并调用的是delete[] 。往往是用来和C代码保持兼容一般不推荐使用

3. 无论是编译器还是程序员都很难区分出new[]和new分配的空间错误的运用delete将导致资源异常

4. 在C++历史上曾经出现过无数的引用计数型智能指针实现但没有一个比得上boost::shared_ptr在过去、现在和将来它都是最好的

5. shared_ptr支持的转型有 static_pointer_c ast<T>、 c onst_pointer_c ast<T>、dynamic_pointer_c ast<T>返回的结果是shared_ptr并能保证这些指针的引用计数正确

6. 用shared_ptr可以消除代码中显示的delete用make_shared、 allocate_shared可以消除代码中显示的new

7. 桥接模式(bridge)是一种结构型设计模式它把类的具体实现细节对用户隐藏起来以达到类之间的最小耦合关系。在具体编程实践中桥接模式也被称为p imp l或者handle/body惯用法它可以将头文件的依赖关系降到最小减少编译时间而且可以不使用虚函数实现多态

8. get_deleter(shared_ptr<T>c onst&p)可以获得删除器。 shared_ptr的删除器在处理某些特殊资源时非常有用它使得用户可以定制、扩展shared_ptr的行为使其不仅仅能够管理内存资源而是称为一个“万能”的资源管理工具

9. 对应shared_ptr也有一个shared_arrayscoped_array和shared_array均不对operator[]做下标检测

10.weak_ptr是为配合shared_ptr而引入的更像是shared_ptr的一个助手而不是智能指针其没有重载operator*和->不具有普通指针的行为。它最大的作用在于协助shared_ptr工作像旁观者那样观测资源的使用情况

11.weak_ptr被设计为与shared_ptr共同工作可以从一个shared_ptr或者另一个weak_ptr对象构造获得资源的观测权。但weak_ptr没有共享资源它的构造不会引起指针引用计数的增加。 同样在weak_ptr析构时也不会导致引用计数的减少它只是一个静静的观察者

12.获得this指针的shared_ptr使对象自己能够产生shared_ptr管理自己class T:publicenable_shared_from_this<T>, then shared_ptr shared_from_this().

13. intru s iv e_ptr是一个侵入式的引用计数型指针。当对内存占用的要求非常严格或现存代码已经有了引用计数机制时可以考虑。一般情况不推荐使用。

14.pool为固定块大小的类似malloc的原生内存分配器支持数组式分配一般情况下不必对分配的内存调用free()。只分配原生内存不调用构造函数回收不调用析构函数最好不要用于对象。

15. singleton_poo l和pool接口完全一致但为单件线程安全同样要求编译期指定要分配的原生内存块大小

16.object_pool为特定类型的对象池不支持数组式分配支持对象分配和对象原生内存分配

17.pool_alloc和fast_pool_allocator是boost提供的两个STL分配器。除非有特别需求我们应该总使用STL实现自带的内存分配器。使用定制的分配器需要经过仔细的测试 以保证它与容器可以共同工作。

18.内存管理是C++程序开发中永恒的话题 因为没有GC小心谨慎的管理内存等系统资源是每一个C++程序员都必须面对的问题

11.assign map_list_of/pair_list_of函数map<int, int>m 1=map_list_of(1,2)(3,4)(5,6)map<int, string>m2=map_list_of(1, "one")(2, "tw o")

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

13.assign repeat()可以重复生成值 repeat_fun()可以重复无参函数或仿函数 range()则可以从序列中取出部分或全部vector<int>v=list_of(1).repeat(3,2)(3)(4)(5); //v=1,2,2,2,3,4,5mult is et<int>m s; ins ert(ms).rep eat_fun(5,&ran).rep eat(2, 1), 10; //ms=x,x,x,x,x,1,1,10deque<int>d;push_front(d).range(v.begin(),v.begin()+5); //d=3,2,2,2,1

14.as sign支持8个STL标准容器vector、string、deque、list、s et、multis et、map、multimap对容器适配器s tac k、 queue、 priority_queue则需要通过to_adapter()stac k<int>stk=(list_of(1),2, 3).to_adapter();queue<string>q=(list_of("cpp")("jav a")).repeat(2, "C#").to_adapter();priority_queue<doub le>pq=(list_of(1.414), 1.732).to_adapter();

15.as sign也支持部分不在STL中的非标准容器slist、 hash_map、 hash_s et因为其符合标准容器定义 同时也支持大部分boost容器 array、 c ircular_buffer、 unordered等

16.assign list_of()嵌套vector<vector<int>>v=list_of(list_of(1)(2)) list_of(list_of(3)(4));v+=lis t_o f(5)(6), lis t_o f(7)(8);

17.as sign ref_list_of()、 cref_list_of()、 ptr_push_back()、 ptr_list_of()还支持以引用或指针来构造初始化int a=1,b=2,c=3;vector<int>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: :poo l: :sing leton_default<T>在main之前进行构造支持继承或非继承形式最恨main之前的事情了

20.单件boost::serialization: :singleton<T>在main之前进行构造支持继承或非继承形式。继承方式更彻底一些非继承方式不影响原有代码

21.boost::tr ibool三态boo l indetermin ate(triboo l)可判断一个三态bool是否处于不确定状态

22.选择optional<bool>还是triboo l如果返回值可能是无效的那么就是optional<boo l>如果返回值总是确定的但可能无法确定其意义那么就用tribool 最多自己随手定义个enum状态为了这点需求需要记住这一堆名称和细节 

23.using namespace std::rel_ops;则一旦为类定义了operator==和<则自动具有!=、 >、<=和>=的功能。boost operators库提供了对该功能的增强使用时只需继承自这些类并提供指定的operator重载即可获得附送的重载

1. equality_c omparable<T>要求提供==可自动实现!=相等语义

2. les s_than_c omparable<T>要求提供<可自动实现>、 <=、 >=

3. addable<T>要求提供+=可自动实现+

4. subtractable<T>要求提供-=可自动实现-

5. inc rementable<T>要求提供前置++可自动实现后置++

6. dec rementable<T>要求提供前置--可自动实现后置--

7. equiva lent<T>要求提供<可自动实现==等价语义

8. totally_ordered全序概念组合了equality_c omparable和les s_than_c omparable

9. addit ive可加减概念组合了addab le和subtrac table

10.multiplicative可乘除概念组合了multip liab le和diviab le

11.arithmet ic算术运算概念组合了additive和mu ltip lic ativ e

12.unit_stoppable可步进概念组合了inc rementable和decrementable

13.public dereferenceable<T,P, (B)>解引用操作符要求提供operator*可自动实现operator->。 P为operator->返回类型一般为T*

14.public indexable<T, I,R, (B)>下标操作符 I为下标类型要求能够与类型T做加法操作通常为int R是operator[]的返回值类型通常是一个类型的引用。要求提供operator+(T, I)将自动实现operator[]

1. 如果只关心类的等价语义那么就用equivalent如果想要精确的比较两个对象的值就是用equality_c omprable。相等equivalent基于"=="实现而equality_c omprable基于"<"的"!(x<y)&&!(x>y)"实现。

2. 应该总对异常类是用虚继承

3. struc t my_exc eption:virtual std::exc eption, //兼容C++标准异常virtual boost::exc eption

{};

5. boost库预定义的异常类型typedef error_info<struct errinfo_api_function_, char c onst*>errinfo_api_function;typedef error_info<struct errinfo_at_line_, int>errinfo_at_line;typedef error_info<struct errinfo_file_handle_,weak_ptr<FILE>>errinfo_file_handle;typedef error_info<struct errinfo_file_name_, std::string>errinfo_file_name;typedef error_info<struct errinfo_file_open_mode_, std::string>errinfo_file_open_mode;typedef error_info<struct errinfo_type_info_name_, std::string>err or_in fo_typ e_in fo_nam e;

2. %N%标记第N个参数相当于占位符不带任何其他的格式化选项

3. xpres sive使用regex_token_iterator<>提供了强大的分词迭代器

10. tie()可以生成一个元素类型全是引用的tuple相当于make_tup le(ref(a),ref(b), .. .)可以用于左值通常用来接收返回tup le或p air函数的返回值可以看成是对tup le的解包

11. element<N,T>::typ e可以给出T中第N个元素的类型 length<T>: :va lue可以给出T的元素数量

12.any能够容纳任意类型可以用any_c as t<T>(a)类型安全的取出any中的值让人联想到Ogre::Any

13.any可以持有原始指针但这样的用法很不安全会导致内存泄露。应该使用智能指针包装原始指针这样在any析构时智能指针会自动的调用delete从而安全的释放资源

14.如果希望一种数据结构具有tup le那样的容纳任意类型的能力又可以在运行时动态变化大小那么就可以用any作为元素类型搭配容器

15.variant是对C/C++中union概念的增强和扩展。 var inat是有界类型元素类型范围由用户指定 any是无界类型可以容纳任意类型

16.mult i_array<int,3>相当于int ma[X][Y][Z]的多维数组。multi_array没有异常机制来处理错误保证数组范围不越界是库用户自己的责任

17.property_tree是一个保存了多个属性值的树形数据结构可以用类似路径的简单方式访问任意节点的树形而且每个节点都可以用类似STL的风格遍历子节点。property_tree特别适合于应用程序的配置数据处理可以解析xml、 ini、 js on和info四种格式的文本数据使用它能减轻自己开发配置管理的工作。

pigyun25元/月,香港云服务器仅起;韩国云服务器,美国CUVIP

pigyun怎么样?PIGYun成立于2019年,2021是PIGYun为用户提供稳定服务的第三年,期待我们携手共进、互利共赢。PIGYun为您提供:香港CN2线路、韩国CN2线路、美西CUVIP-9929线路优质IaaS服务。月付另有通用循环优惠码:PIGYun,获取8折循环优惠(永久有效)。目前,PIGYun提供的香港cn2云服务器仅29元/月起;韩国cn2云服务器仅22元/月起;美国CUVI...

日本CN2独立物理服务器 E3 1230 16G 20M 500元/月 提速啦

提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...

香港服务器多少钱一个月?香港云服务器最便宜价格

香港服务器多少钱一个月?香港服务器租用配置价格一个月多少,现在很多中小型企业在建站时都会租用香港服务器,租用香港服务器可以使网站访问更流畅、稳定性更好,安全性会更高等等。香港服务器的租用和其他地区的服务器租用配置元素都是一样的,那么为什么香港服务器那么受欢迎呢,香港云服务器最便宜价格多少钱一个月呢?阿里云轻量应用服务器最便宜的是1核1G峰值带宽30Mbps,24元/月,288元/年。不过我们一般选...

boost库为你推荐
郑州软银筑巢360郑州哪家公司做的好,服务也比较好?美国10次啦导航与美国GPS可以抗衡的国产导航有哪些?滚筒洗衣机和波轮洗衣机哪个好一分钟看懂滚筒洗衣机和波轮洗衣机 滚筒洗衣机和波轮洗衣机哪个好小说软件哪个好用免费什么软件看小说全免费炒股软件哪个好什么炒股软件比较好用?播放器哪个好什么播放器好用播放器哪个好什么手机视频播放器比较好用?yy空间登录怎么登陆YY空间辽宁联通网上营业厅中国联通网上营业厅固定电话费查询东莞电信宽带东莞电信宽带资费问题。急!
申请域名 购买域名 子域名查询 com域名价格 stablehost 韩国空间 php探针 主机合租 英文站群 e蜗牛 cpanel空间 百兆独享 网站木马检测工具 183是联通还是移动 刀片式服务器 卡巴斯基破解版 移动服务器托管 路由跟踪 下载速度测试 湖南idc 更多