C/C++软件工程师就业求职手册学习笔记---第十三章

第十三章 标准模板库

容器可以分为:

1、序列容器 vectordeque string list

2、关联容器 setmultiset map multimap

3、适配容器 stackqueue priority_queue

 

vector 和 deque的区别

1、deque成为双向队列容器,可以在队首队尾进行操作

2、deque中没有reserve()和capacity()成员函数

 

STL适配容器:

1、stack适配器,可以将任意类型的序列容器转换为一个堆栈,一般使用deque作为支持的序列容器,元素只能后进先出,不支持遍历整个stack

2、queue适配,可以将任意序列容器转换为一个队列,一般使用deque作为支持的序列容器。元素只能先进先出,不能遍历整个queue

3、priority_queue适配器,可以将任意序列容器转换为优先队列,一般使用vector作为底层的存储方式。只能访问第一个元素,不能遍历整个priority_queue,第一个元素是优先级最高的

 

stack<int,vector<int>>s;使用vector实现stack

queue<int,vector<int>>s;使用vector实现queue,只能按照vector方式处理数据,没有pop_front函数

 

关联容器:

1、set容器:其元素值是唯一的。集合中元素按一定顺序排列,并被作为集合中的实例。

2、multiset容器:与set类似,其中值可以重复

3、map 容器:提供一对一的数据处理,第一个称为关键字,第二个称为关键字的值。内部组织结构式红黑树,能对数据自动排序,map内部所有数据是有序的。

4、multimap与map类似,但是键值可以重复。

例子1:

map<int,string>m;

m.insert(pair<int,string>(1,"one"));

map默认是升序排列,如果想按照降序排列,可以声明为<int,string,greater<int>>,greater<int>表示按照int升序排列。

此外还有hashmap,是由哈希表实现的,map的优点在于元素可以自动按照键值排序,而hash_map的优点在于各项操作的平均时间复杂度接近常数。

reverse<int[4]>(a,a+4);将a数组逆置

for_each,find,

remove 和 erase区别

 

智能指针:

auto_ptr<typename>ptr(new typename(" haha "));只能使用auto_ptr构造器的复制,直接赋值是非法的。

智能指针可以在发生异常的时候,同样释放泄露的内存。

智能指针是如何实现的:

1、创建类的新对象时,初始化指针,并将引用计数置为1;

2、当对象作为另一个对象的副本而创建时,复制构造函数复制指针并增加与之相应的引用计数。

3、对一个对象赋值时,赋值操作符减少左操作数所指向对象的引用计数,如果引用计数减至0,则删除对象,增加右操作数指向对象的引用计数。

4、调用析构函数,引用计数减一,如果为0,则删除基础对象。

5、重载->和*保证智能指针有类似普通指针的操作。

------------智能指针实现未做,后续补上------

 

智能指针的限制:

1、要求一个对象只能有一个拥有者

classA*pA=new classA;

auto_ptr<classA>ptr1(pA);

auto_ptr<classA>ptr2(pA);

这是错误的。

2、不能以传值方式传递,如果要传递,可以采用引用的方式。

3、不支持数组,其release是释放所有权,auto_ptr在复制构造函数和=操作符含义决定不能作为stl容器成员。

 

函数对象:

函数对象就是重载了()操作符的类的对象,可以想函数一样使用。

bind1st和bind2nd

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值