C++标准库中的通用工具,他们多是短小精悍的函数或者类,完成那些最一般的工作,大致如下:
============================================================ 对组 | |->名称----->pair |->动机----->方便 |->思想----->结构 |->应用----->如果某个函数要求传回两个值,可能比较有用 | |->Type----->struct |->Include---> <utility> |->Define----> pair<calss first,calss second>(first,second) | |->member | |------>first | |------>second | |->Sub | |------>constructor(default,assignment,copy) | |->Fun |------>operator(==,<,<=,>,>=,!=,=) |------>make_pair(first,second) 返回一个新的pair
============================================================ 智能指针 | |->名称----->auto_ptr |->动机----->防止“被异常抛出时发生资源泄露” |->思想----->用以个类(auto_ptr)来包含new和delete |->应用----->如果你要用new,那么尽量想起它 |->个性 | |------> ①与所指的对象同生共死 ——核心 | |------> ②由于①则:严禁一物(对象)两主(auto_ptr) | |------> ③由于②则:拥有权(ownership)转移——这个最有意思,但也最危险。 | |------> ④跟一般的指针具有不对等的地位 | |->陷阱 | |------> ①用同一对象对两个auto_ptr初始化 | | |---->违背了个性② | |------> ②在类中没有重载赋值运算符 | | |---->由于个性③而可能出现问题,同样于copy constructor | |------> ③定义auto_ptr数组 | |---->与①所表述的核心不相关 | |->Type-----> class |->Include---> <memory> |->Define----> auto_ptr<class>(new class) | |->Sub | |------> constructor (default , assignment , copy) | |------> reset(ptr) 用ptr重新初始化auto_ptr | |->Fun |------> operator (* ,-> ,=) |------> get() 返回auto_ptr所指对象的地址,并不释放自身的拥有权 |------> release() 返回auto_ptr所指对象的地址,但释放自身的拥有权
============================================================ 三个辅助函数 | |->名称 | |----->max<class>(x,y) ,max<class>(x,y,compare) | |----->min<class>(x,y) ,min<class>(x,y,compare) | |----->swap<class>(x,y) | |->动机----->方便 |->思想----->函数 |->应用----->太多了 | |->说明 | |------> ①max和min都有两种参数形式,第一种好说,第二种的conpare表示比较函数 | |------> ②swap能够被正确执行的前提是你的<class>必须有copy costructor和assignment | 这是swap的内部机制决定的——他先调用copy产生一个中间对象,然后调用 | assignment轮换对象 | |->Type----->函数 |->Include---> <algorithm>
============================================================== 比较运算符的一个简洁形式 | |->名称----->std::rel_ops |->动机----->尽最大可能代码重用 |->思想----->由于比较运算最基本的只有两个:<和==(当然也可以是>和==,只不过STL选择了前)。| 其他的各种运算都可根据这两个剧本运算很快的得出结果。那么,当然可以用某种形式把 | 其他的比较运算封装起来,直接利用了。STL采用的是命名空间的做法——std::rel_ops | 包含了>,!=,<=,>=这四个比较运算。 | |->应用----->如果你写的类需要重载比较运算符,那么简单的一句using namespace std::rel_ops是| 在简单不过的事了。相信每一个跟我一样懒惰的人都会喜欢:) | |->陷阱----->std::rel_ops只是帮你把>,!=,<=,>=这四个比较运算封装了起来,而且它的实现是建立 | 在你自己正确的重载了<和==的基础之上的。不要指望什么事都不干,一个 | std::rel_ops就能万事大吉,打下哪有这么美的事?! | |->type---->namespace
=================================================== |
转】STL摘要一:通用工具(pair,auto_ptr,std::rel_ops)
最新推荐文章于 2024-01-05 19:04:28 发布
本文介绍了C++标准库中的几个核心组件,包括pair用于便捷的数据组合;auto_ptr用于智能内存管理,有效避免资源泄露;max、min和swap等辅助函数简化编程流程;以及std::rel_ops提供的比较运算符封装。
摘要由CSDN通过智能技术生成
2008-11-10 13:31