STL学习笔记之通用工具

                               STL学习笔记之通用工具                  

1 Pairs(对组)

Class Pair 可以将两个值视为一个单元。C++标准程序库中多处使用了这个Class。容器类别MapMultimap就是使用该类来管理其键值/实值的承兑元素的。任何函数需要两个值,也需要Pair

Pair定义于<utility>中,其被定义为一个struct,而不是一个类,故所有成员都为Public。其数据成员为firstsecond

Pair之间的比较:如果两个pair对象内的所有元素都相等,这两个pair对象就被视为相等(equal)。其中第一个元素的比较优先级较高。

Make_pair():

Namespace std{

    Template<class T1,class T2>

     Pair<T1,T2>make_pair(const T1 &x,const T2&y)

    Return pair<T1,T2>(x,y);

}

2 Class auto_ptr

Auto_ptr是这样一种指针,任何情况下,只要自己被销毁,就一定连带释放其所指资源。Auto_ptr要求一个对象只能有一个拥有者,严禁一物二主。

使用方法:

#include<memory>

Void f(){
    std::auto_ptr<classA> ptr1(new ClassA);//ok

    std::auto_ptr<classA> ptr2 = new ClassA;//error

    ......

}

注意:auto_ptr<>不允许使用一般指针管用的赋值初始化方式,必须直接使用数值来完成初始化。

所有权转移:当auto指针AB都使用同一个对象进行初始化时,便会出现一个问题:当A销毁之后,A所指向的对象也被释放了,那么B指向哪里?这是很危险的行为。所有权转移便是为了解决这样的问题。

//ptr1指向新生的对象X

std::auto_ptr<classA> ptr1(new ClassA);

//下面这句神奇的代码之后,ptr1不再拥有对对象X的控制权,它会指向null,当然会被销毁,此时,对象X的控制权转移到了ptr2(要如此这般,需要注意的是只有auto 指针可用哪来当做另一个auto指针的初值)

std::auto_ptr<classA> ptr2(ptr1);

   使用auto_ptr的注意点:

1) Auto_ptrs之间不能共享拥有权

2) 并不存在针对array而设计的auto_ptrs

3) Auto_ptrs并不是万能的智能型指针

4)Auto_ptrs不满足STL容器对元素的要求(因为在Copyassign工作之后,原本的auto_ptr和新产生的auto_ptr并不相等)

你可能感兴趣的:(工作,struct,null,Class,工具,pair)