C++知识总结(22)

来源:互联网 发布:霸气的淘宝昵称大全 编辑:程序博客网 时间:2024/05/18 00:51

 

106. vector的优缺点

优点:

1)不确定内存大小的数组的连续存储,可以像数组进行动态操作;

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

3)节省空间

缺点:

1)在内部进行插入删除操作效率低

2)只能在vector的最后进行push和pop,不能在vector的头进行push和pop

3)当动态添加的数据超过vector默认分配的大小时要进行整体的重新分配、拷贝与释放 

 

107 容器选择有哪些原则

1)如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector

2)如果你需要大量的插入和删除,而不关心随即存取,则应使用list

3)如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque

4)如果你要存储一个数据字典,并要求方便地根据key找value,那么map是较好的选择

5)如果你要查找一个元素是否在某集合内存中,则使用set存储这个集合比较好

 

108 C++中使用模板类的原因

(1)可用来创建动态增长和减小的数据结构

(2)它是类型无关的,因此具有很高的可复用性。

(3)它在编译时而不是运行时检查数据类型,保证了类型安全

(4)它是平台无关的,可移植性

(5)可用于基本数据类型

 

109. 常用的排序算法有哪些?简单描述几个排序算法的优缺点?

1.插入排序

基本思想:

   将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。

优点:稳定,快

缺点:比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量庞大的时候

2.希尔排序

基本思想:

   先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行依次直接插入排序。

优点:快,数据移动少

缺点:不稳定,d的取值是多少,应取多少个不同的值,都无法确切知道,只能凭经验来取

3.简单选择排序

基本思想:

   将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。

优点:数据移动次数已知为(n-1)次

缺点:比较次数多

4.冒泡排序

基本思想:

   在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

优点:稳定

缺点:慢,每次只能移动相邻两个数据

5.快速排序

基本思想:

   1)选择一个基准元素,通常选择第一个元素或者最后一个元素,

   2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比    基准元素值小。另一部分记录的 元素值比基准值大。

   3)此时基准元素在其排好序后的正确位置

   4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。

优点:极快,数据移动少.

缺点:不稳定

6.简单选择排序

   归并排序是一种非就地排序,将需要与待排序序列一样多的辅助空间。在使用它对两个己有序的序列归并,将有无比的优势。其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlog2n)。对数据的有序性不敏感。若数据节点数据量大,那将不适合。但可改造成索引操作,效果将非常出色。

7.简单选择排序

   堆排序:由于它在直接选择排序的基础上利用了比较结果形成。效率提高很大。它完成排序的总比较次数为O(nlog2n)。它是对数据的有序性不敏感的一种算法。但堆排序将需要做两个步骤:-是建堆,二是排序(调整堆)。所以一般在小规模的序列中不合适,但对于较大的序列,将表现出优越的性能。

 

110 C++中如何实现对象的动态创建?

工厂模式+无卡反射机制