您的位置:首页 > 编程语言 > C语言/C++

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

2014-04-03 14:52 288 查看
第十三章 标准模板库
容器可以分为:
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: