C++知识总结(21)

来源:互联网 发布:相机滤镜软件下载 编辑:程序博客网 时间:2024/06/07 15:09

101. 标准库的六大组建分别是什么?有什么作用

1、容器(Containers):各种数据结构,如Vector,List,Deque,Set,Map,用来存放数据,STL容器是一种Class Template,就体积而言,这一部分很像冰山载海面的比率。

2、算法(Algorithms):各种常用算法如Sort,Search,Copy,Erase,从实现的角度来看,STL算法是一种Function Templates

3、迭代器(Iterators):扮演容器与算法之间的胶合剂,是所谓的泛型指针,共有五种类型,以及其它衍生变化,从实现的角度来看,迭代器是一种将:Operators*,Operator->,Operator++,Operator--等相关操作予以重载的Class Template。所有STL容器都附带有自己专属的迭代器——是的,只有容器设计者才知道如何遍历自己的元素,原生指针(Native pointer)也是一种迭代器。

4、仿函数(Functors): 行为类似函数,可作为算法的某种策略(Policy,从实现的角度来看,仿函数是一种重载了Operator()ClassClass Template。一般函数指针可视为狭义的仿函数。

5、配接器(适配器)(Adapters):一种用来修饰容器(Containers)或仿函数(Functors)或迭代器(Iterators)接口的东西,例如:STL提供的QueueStack,虽然看似容器,其实只能算是一种容器配接器,因为 它们的底部完全借助Deque,所有操作有底层的Deque供应。改变Functor接口者,称为Function Adapter;改变Container接口者,称为Container Adapter;改变Iterator接口者,称为Iterator Adapter。配接器的实现技术很难一言蔽之,必须逐一分析。

6、分配器(Allocators):负责空间配置与管理,从实现的角度来看,配置器是一个实现了动态空间配置、空间管理、空间释放的Class Template

 

102. 什么是泛型编程?

泛型编程就是以独立于任何特定类型的方式编写代码,而模板是泛型编程的基础。

 

103. vectorlist的区别

c++标准库中,容器vectorlist都可以用来存放一组类型相同的数据。而且二者不同于数组的一点是,支持动态增长。但它们还是有有几点不同

(1)  vector是顺序表,表示的是一块连续的内存,元素被顺序存储;list是双向连接表,在内存中不一定连续。

(2)当数值内存不够时,vector会重新申请一块足够大的连续内存,把原来的数据拷贝到新的内存里面;list因为不用考虑内存的连续,因此新增开销比vector小。

(3list只能通过指针访问元素,随机访问元素的效率特别低,在需要频繁随机存取元素时,使用vector更加合适。

(4)当向vector插入或者删除一个元素时,需要复制移动待插入元素右边的所有元素;因此在有频繁插入删除操作时,使用list更加合适。

 

104. list的优缺点

优点:

1)不使用连续内存完成动态操作

2)在内部方便的进行插入和删除操作

3)可在两端进行push、pop

缺点:

1)不能进行内部的随机访问,即不支持[ ]操作符和vector.at(

2)相对于verctor占用内存多

 

105. deque的优缺点

优点:

1)随机访问方便,即支持[ ]操作符和vector.at()

2)在内部方便的进行插入和删除操作

3)可在两端进行pushpop

缺点:

占用内存多

原创粉丝点击