C++标准程序库读书笔记-第四章通用工具
2014-11-30 18:13
190 查看
1.Pairs(对组)
(1)class pair可以将两个值视为一个单元。任何函数需返回两个值,也需要pair。
(2)便捷地创建pair对象可以使用make_pair函数
等价于
2.Class auto_ptr
(1)auto_ptr是一种指针:它是”它所指向的对象“的拥有者(owner)。所以,当身为对象拥有者的auto_ptr被摧毁时,该对象也将遭到摧毁。auto_ptr要求一个对象只能有一个拥有者,严禁一物二主。
(2)auto_ptr不允许你使用一般指针惯用的赋值(assign)初始化方式。你必须直接使用数值来完成初始化。
(3)auto_ptr拥有权转移
由于一个auto_ptr会删除其所指对象,所以这个对象绝对不能同时被其他对象“拥有”。绝对不应该出现多个auto_ptr同时拥有一个对象的情况。
auto_ptr的copy构造函数和assignment操作符将对象拥有权交出去。
copy构造函数的运用
赋值动作
如果ptr2被赋值之前正拥有另一个对象,赋值动作发生时会调用delete,将对象删除
(4)起点和终点(source and sink)
拥有权的转移,使得auto_ptr产生一种特殊用法:某个函数可以利用auto_ptr将拥有权交给另一个函数。
1.某函数是数据的终点
2.某函数是数据的起点。当一个auto_ptr被返回时,其拥有权便被转交给调用端
(5)auto_ptr作为成员之一
3.数值极限
(1)C语言所采用的预处理器常数
整数常数定义于<climits>和<limits.h>,浮点常数定义于<cfloat>和<float.h>
(2)C++通过模板numeric_limits提供极值(定义于<limits>)
4.辅助函数
算法程序库(定义于头文件<algorithm>)内含三个辅助函数,一个用在两值之中挑选较大者,另一个用来在两值之中挑选较小者,第三个用来交换两值。
(1)swap函数
只有当swap()所依赖的copy构造操作和assignment操作行为存在时,这个调用才有效。
(2)辅助性的“比较操作符”
有四个template functions,分别定义了 !=,>,<=,>=四个比较操作符。它们都是利用操作符==和<完成的。
(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++标准程序库 学习笔记 第四章 通用工具
- 破解完全入门篇,第四章--调试器及相关工具入门
- Android界面适配通用工具(RelayoutTool)-根据分辨率等比例缩放
- Java并发和多线程4:使用通用同步工具CountDownLatch实现线程等待
- STL概览-通用工具pair,auto_ptr,std::rel_ops
- JavaScript进阶(三)常见工具(校验、通用)
- 通用的 数组到数组强制转换 的工具函数
- 通用工具pair
- (小工具)Java反射机制实现任意对象集合按指定任意字段进行分组通用程序实践
- SQL数据库通用数据导出工具(一)
- wsCaller:Web Service通用客户端和测试工具
- 数据抽取工具――DMCTextFilter V4.2(纯文本抽出通用程序库)
- 自己写的J2EE通用URL重定向工具
- List集合按照对象中某个属性排序通用工具类(按对象中某属性排序)
- 九、 通用工具 ----动态内存管理---new
- 通用 GM Tech 2 检测工具介绍
- 嵌入式linux通用截图工具(增强版)
- Android快速开发工具---通用的适配器Adapter