一、pair的总结:
1、class pair 可以将两个值视为一个单元,尤其容器类别map和multimap,就是使用pairs来管理其键值/实值的成对元素。任何需要返回两个值,也需要pair。
2、pair类是struct结构,不是class结构,所以成员都是public。
3、pair的一些操作:初始化、赋值、比较、便捷函数(make_pair())。
二、auto_ptr的总结:
1、auto_ptr设计的目的:帮助程序员防止“被异常抛出时发生资源泄露”。智能型指针本身就是区域变量,所以无论正常退出,还是异常退出,它就一定会被销毁。它是“它所指向的对象"的拥有者。所以,当身为对象拥有者的auto_ptr被摧毁时,该对象也将遭到摧毁。aotu_ptr要求一个对象只能有一个拥有者,严禁一物二主。
2、注意:auto_ptr<>不允许你使用一般指针惯用的赋值(assign)初始化方式。你必须直接使用数值来完成初始化。
3、auto_ptr的copy构造函数和assignment操作符将对象拥有权交出去。某个函数可以利用auto_ptr将拥有权转交给另一个函数:(1)某个函数式数据的终点。如果aut_ptr以by value方式被当做一个参数传递给某函数,就是这话总情况。此时被调用端的参数获得了这个auto_ptr的拥有权如果函数不在将它传递出去,它所指的对象就会在函数退出时被删除;(2)某函数是数据的起点。当一个auto_ptr被返回,其拥有权便被转交给调用端了。
4、当传递进函数的auto_ptr在函数退出时被销毁,所以退出时该智能指针无法使用,靠pass by reference或constant reference都无法更改auto_ptr对象的拥有权。关键字const并非意味你不能更改auto_ptr所拥有的对象,而是意味你不能更改auto_ptr的拥有权。
5、使用auto_ptr时需要注意一下几点:
(1)、auto_ptrs之间不能共享拥有权。
(2)、并不存在针对array而设计的auto_ptrs。auto_ptr不可以指向array,因为auto_ptr是透过delete而非delete[]来释放其所拥有的对象。C++标准中并没有提供针对array而设计的auto_ptr。
(3)、auto_ptrs决非一个”四海通用“的智能指针。注意它不是引用技术型指针。
(4)、auto_ptr不满足STL容器对其元素的要求。因为在拷贝和赋值动作之后,原本的auto_ptr和新产生的auto_ptr并不相等。
6、const auto_ptr具有常熟性,其拥有权不得被更改。
7、auto_ptr的一些内部介绍:
(1)、auto_ptr::element_type所拥有之对象的型别
(2)、构造函数、赋值函数、析构函数
(3)、数值存取、数值操作
三、数值极限的极值是一个与平台相关的特性。C++标准库通过template提供了这些极值,方便写出与平台无关的程序。其中整数常数定义于<climits>和<limits.h>中,浮点型定义在<cfloat><float.h>中。
四、算法程序库中<algorithm>定义了三个辅助函数,一个用来在两值之中挑选最大者,另一个用来在两值之中挑选最小者,第三个用来交换两值。
五、头文件<cstddef><cstdlib>中定义了一些常用的常量、宏、型别和函数。
1、exit(int status)退出。其中EXIT_SUCCESS是正常退出,EXIT_FAILURE是程序不正常结束。
2、abort()退出程序(在某些系统上可能导致系统崩溃)。
3、atexit(void (*function()))退出(exit)程序时调用某些函数。