C++标准程序库读书笔记-第四章通用工具
1.Pairs(对组)
(1)class pair可以将两个值视为一个单元。任何函数需返回两个值,也需要pair。
(2)便捷地创建pair对象可以使用make_pair函数
std::make_pair(32,'@')
等价于
std::pair(int,char)(42,'@')
2.Class auto_ptr
(1)auto_ptr是一种指针:它是”它所指向的对象“的拥有者(owner)。所以,当身为对象拥有者的auto_ptr被摧毁时,该对象也将遭到摧毁。auto_ptr要求一个对象只能有一个拥有者,严禁一物二主。
(2)auto_ptr不允许你使用一般指针惯用的赋值(assign)初始化方式。你必须直接使用数值来完成初始化。
std::auto_ptr<ClassA> ptr1(new ClassA); //OK
std::auto_ptr<ClassA> ptr2 = new ClassA; //ERROR
(3)auto_ptr拥有权转移
由于一个auto_ptr会删除其所指对象,所以这个对象绝对不能同时被其他对象“拥有”。绝对不应该出现多个auto_ptr同时拥有一个对象的情况。
auto_ptr的copy构造函数和assignment操作符将对象拥有权交出去。
copy构造函数的运用
//initialize an auto_ptr with a new object
std::auto_ptr<Class A> ptr1(new ClassA); //copy the auto_ptr
// - transfers ownership from ptr1 to ptr2
std::auto_ptr<Class A> ptr2(ptr1)
赋值动作
//initialize an auto_ptr with a new object
std::auto_ptr<Class A> ptr1(new ClassA);
std::auto_ptr<Class A> ptr2; //create another auto_ptr
ptr2 = ptr1; //assign the auto_ptr
// - transfers ownership from ptr1 to ptr2
如果ptr2被赋值之前正拥有另一个对象,赋值动作发生时会调用delete,将对象删除
//initialize an auto_ptr with a new object
std::auto_ptr<Class A> ptr1(new ClassA);
//initialize another auto_ptr with a new object
std::auto_ptr<Class A> ptr2(new ClassA);
ptr2 = ptr1; //assign the auto_ptr
// - delete object owned by ptr2
// - transfers ownership from ptr1 to ptr2
(4)起点和终点(source and sink)
拥有权的转移,使得auto_ptr产生一种特殊用法:某个函数可以利用auto_ptr将拥有权交给另一个函数。
1.某函数是数据的终点
2.某函数是数据的起点。当一个auto_ptr被返回时,其拥有权便被转交给调用端
std::auto_ptr<ClassA> f()
{
std::auto_ptr<ClassA> ptr(new ClassA);
...
return ptr; //transfer ownership to calling funciton
}
void g()
{
std::auto_ptr<ClassA> p;
p = f(); //p gets ownership of the returned object
//(previously returned object of f() gets deleted)
}
(5)auto_ptr作为成员之一
3.数值极限
(1)C语言所采用的预处理器常数
整数常数定义于<climits>和<limits.h>,浮点常数定义于<cfloat>和<float.h>
(2)C++通过模板numeric_limits提供极值(定义于<limits>)
4.辅助函数
算法程序库(定义于头文件<algorithm>)内含三个辅助函数,一个用在两值之中挑选较大者,另一个用来在两值之中挑选较小者,第三个用来交换两值。
(1)swap函数
namespace std {
template<class T>
inline void swap(T& a,T& b) {
T tmp(a);
a = b;
b = tmp;
}
};
只有当swap()所依赖的copy构造操作和assignment操作行为存在时,这个调用才有效。
(2)辅助性的“比较操作符”
有四个template functions,分别定义了 !=,>,<=,>=四个比较操作符。它们都是利用操作符==和<完成的。
C++标准程序库读书笔记-第四章通用工具的更多相关文章
- 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度
<Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...
- 《Linux内核设计与实现》 第八周读书笔记 第四章 进程调度
20135307 张嘉琪 第八周读书笔记 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有 ...
- 《Linux内核分析》读书笔记(四章)
<Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...
- 4 Visual Effects 视觉效果 读书笔记 第四章
4 Visual Effects 视觉效果 读书笔记 第四章 Well, circles and ovals are good, but how about drawing r ...
- 《Linux内核设计与实现》读书笔记 第四章 进程调度
第四章进程调度 进程调度程序可看做在可运行太进程之间分配有限的处理器时间资源的内核子系统.调度程序是多任务操作系统的基础.通过调度程序的合理调度,系统资源才能最大限度地发挥作用,多进程才会有并发执行的 ...
- 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算
http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...
- Getting Started With Hazelcast 读书笔记(第四章)
第四章 分而治之 在指导了如何进行基本使用之后,又再次进入理论模块. Hazelcast的基本策略就是切片分区,默认是271个片.内置一个 partition table记录那个节点是那个分区,并在h ...
- STL源码剖析读书笔记--第四章--序列式容器
1.什么是序列式容器?什么是关联式容器? 书上给出的解释是,序列式容器中的元素是可序的(可理解为可以按序索引,不管这个索引是像数组一样的随机索引,还是像链表一样的顺序索引),但是元素值在索引顺序的方向 ...
- 《Linux内核设计与实现》读书笔记——第四章
标签(空格分隔): 20135321余佳源 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统. ...
随机推荐
- 第1个linux命令——echo
功能:在显示器上显示一段文字,一般起到一个提示的作用. 语法:echo [-ne][字符串] 或 echo [--help][--version] 详细说明:echo会将输入的字符串送往标准 ...
- (原)配置vs2013使用intel的IPP库
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5473890.html 参考网址: https://software.intel.com/en-us/n ...
- H面试程序(1)编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的 下一秒
编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒. 如输入 2004 年 12 月 31 日 23 时 59 分 59 秒,则输出 2005年 1 月 1 日 0 时 0 分 0 秒. ...
- 一种无new创建对象的方法
var L=function(){ var obj = { age:38, live:true, job:"web dev" }; obj.name = "zhouhui ...
- 如何使用Assetic进行文件管理
安装和配置Assetic 从symfony2.8开始,Assetic就不再被包括在symfony标准版.使用任何Assetic的特性之前需要安装AsseticBundel,在命令行执行下面命令: $ ...
- HTTP之I/O模型图MPM详细解析
高度模块化:DSO MPM:多路处理模块 prefork-->一个主进程+多个工作进程,每个工作进程处理多个请求 worker-->一个主进程+多个工作进程,每个工作进 ...
- 无法添加sql server ER图
Database diagram support objects cannot be installed because this database does not have a valid own ...
- linux mysql 优化
第一 在 /etc/my.cnf 中加入 skip-name-resolve ,重启mysql,这样就能禁用DNS解析,连接速度会快很多.不过,这样的话就不能在MySQL的授权表中使用主机名了而只能用 ...
- windows环境下搭建Cocos2d-X开发环境
最近终于有时间可心搞搞自己的东西了,呵呵,那就开始做个手机小游戏给孩子玩吧. 首先必须选定开发的框架,移动终端开源的游戏框架貌似不多,找来找去也就这个了,名字简单Cocos2d-X,是Cocos2d国 ...
- hdu 3926 Hand in Hand
http://acm.hdu.edu.cn/showproblem.php?pid=3926 这道题是判断两个图是不是同构相似.只要判断图中环的个数和链的个数,和每个环的节点数和链的节点数是否相等. ...