STL学习笔记之通用工具

本文介绍了C++ STL中的两个重要工具:Pair与auto_ptr。Pair用于组合两个值为单一单元,广泛应用于Map和Multimap等容器。auto_ptr则是一种智能指针,能够自动管理对象的生命周期,确保资源正确释放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                               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并不相等)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值